home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1993 / Internet Info CD-ROM (Walnut Creek) (1993).iso / networking / news / nntp / inn / 1.3-1.4pch < prev    next >
Encoding:
Text File  |  1993-03-19  |  193.4 KB  |  7,452 lines

  1. This is an official patch for INN; please apply it.
  2.  
  3. This patch changes INN1.3 to INN1.4.  If you already have the INN1.4
  4. release, do not apply this patch.  Patches must be applied in order.  If
  5. you need other patches, they should be available from the same place where
  6. you got the original software.
  7.  
  8. This patch updates some files that might have been modified by "subst."
  9. Before applying this patch, restore those files to their original state:
  10.     cd $inn/config
  11.     make CONF=config.dist
  12. Then reconfigure after applying this patch.
  13.  
  14. Another option is to apply the patch directly and fix up any rejects by
  15. hand as you review any ".rej" files that get created.
  16.  
  17. Or, you can restore the default config, patch, and re-install your config
  18. and rebuild the distribution:
  19.     cd $inn/config
  20.     mv config.data config.new
  21.     cp config.dist config.data
  22.     make quiet
  23.     cd ..
  24.     patch -p <inn.patch
  25.     cd config
  26.     mv config.new config.data
  27.     cd ..
  28.     make quiet
  29.  
  30. List of changes made in this patch:
  31.     Add NEWSUMASK (default 2) and have appropriate programs set it.
  32.     Add comment about NEWSLIB to config.dist <chongo@ncd.com>
  33.     Add YACC config variable.
  34.     Alias FNDELAY to O_NDELAY for systems without it <urlichs@smurf.sub.org>
  35.     Use $(SHELL) not sh in Makefiles <osm@msen.com>
  36.     Use "echo ...|su" not "su -c ..." in rc.news and BUILD.
  37.     Document setsockopt/svr4 problems.
  38.  
  39.     overview.fmt.5 referenced makeoverview <henrich@crh.cl.msu.edu>.
  40.     Various typos in documentation <ry66@rz;uni-karlsruhe.de>,
  41.     <robert@steffi.demon.co.uk>, <wdh@grouper.mkt.csd.harris.com>.
  42.     Add sample newsfeeds entry to overchan.8
  43.     More text for innwatch.ctl, ``make update'', news overview <rsalz>.
  44.     inews can spool, so you need rnews; update inews.1
  45.     Add rnews explanations to Install.ms.1
  46.  
  47.     Inews should not spool or email if -D given.
  48.     rnews had bad fopen call <mam@mamunx.garmhausen.de>
  49.     rnews could not connect to remote server.
  50.     rnews leaked memory in ReadRemainder.
  51.     decode unpacked end wrong.
  52.     decode used bad pointer comparisons.
  53.  
  54.     #if was backwards in syslog/syslogd.c <peter@dialix.oz.au>.
  55.     Remove leading space in filenames in syslog.conf
  56.  
  57.     Add -O flag to expireover; fix sorting bug <rob@violet.berkeley.edu>.
  58.     *** RUN "expireover -a -s" SOON **
  59.     Malloc overrun in expireover.c article.c <rob@agate.berkeley.edu>
  60.     Have overchan create needed dirs if overview dir != spool dir.
  61.     Add overchan .o dependencies to backends/Makefile.
  62.     avoid unneeded unlink/group in expireover <tale@uunet.uu.net>
  63.     Add -g to expire <tal@warren.mentorg.com>
  64.     faster raceless expireover/overchan locking <rob@agate.berkeley.edu>
  65.  
  66.     use caseEQ not EQ in CMDmode in nnrpd <urlichs@smurf.sub.org>
  67.     Two wrong CloseOnExec calls in article.c <stevo@elroy.Jpl.Nasa.Gov>
  68.     Have nnrpd's HISgetent return (char *) not (STRING).
  69.     Remove STATIC from nnrpd's CMD_unimp function definition; change
  70.     it to recognize slave command.
  71.     Add "date" command (from nntpv2 draft) to nnrpd.
  72.  
  73.     Add -u flag and statistics to nntpget.
  74.     Add -p flag to filechan, buffchan.
  75.     buffchan shouldn't open dropped sites.
  76.     Add -A flag to innxmit.
  77.     newsrequeue re-used variable; coredumped if not logfile mode.
  78.     expireover and fastrm need <ctype.h>.
  79.     Move functions in fastrm so STATIC declaration is okay.
  80.     BUILD and makehistory no longer assume history is in NEWSLIB.
  81.     Spelled Jon's name wrong in dbz.pch <davison@borland.com>
  82.     Use memset not bzero in local FD_ZERO macro.
  83.  
  84.     getlist parsed positional arguments wrong <chongo@ncd.com>
  85.     getlist did not send a QUIT to the server.
  86.  
  87.     Reverse order of elements in include/uio.h <aej@wpi.WPI.EDU>
  88.     Have GetFQDN try to force NIS/YP to use DNS <wietse@wzv.win.tue.nl>
  89.     Fix date parser when hour is 12.
  90.  
  91.     Typo in header in send-ihave <mit@huie.hokudai.ac.jp>
  92.     Had senduucp.log in samples/scanlogs <earle@isolar.Tujunga.CA.US>
  93.     Have innwatch not complain to console if innd dies <mcooper@usc.edu>
  94.     Add logwatch into innwatch <Christophe.Wolfhugel@grasp1.univ-lyon1.fr>
  95.     rmgroup, newgroup, checkgroup are better about updating newsgroups
  96.     <cs@germany.eu.net>
  97.     Spurious erroneous mail line in rmgroup.
  98.     checkgroups mail message is now more clear.
  99.     Convert remaining scripts in samples to use innshellvars
  100.  
  101.     Fix dataloss and fd leak in SITEflush <cjj@sun.com>
  102.     Don't use strlen on mmap'd active file <bobs@monty.rand.org>
  103.     Used ModeReason not RejectReason in CCmode, CCreject<dem@meaddata.com>
  104.     Used wrong argv[] in CCreject <dem@meaddata.com>
  105.     Don't free NULL pointer in innd/rc.c <peter@dialix.oz.au>.
  106.     Set all WIP's properly to NULL <dem@meaddata.com>
  107.     SITEparsefile didn't free old ME entry <dem@meaddata.com>
  108.     innd had typo in NICE_KIDS #if test <enger@seka.reston.ans.net>
  109.     Add (void) to setsid call in innd <stevo@elroy.Jpl.Nasa.Gov>
  110.     SITEwantsgroup didn't check ME patterns
  111.     <watanabe@argon.material.tohoku.ac.jp>
  112.     Don't crash if spooling fails <alden@zaphod.mps.ohio-state.edu>
  113.     Don't reuse socket in innd/cc.c <peter@dialix.oz.au>
  114.     Protect possible NULL return from RChostname (!?).
  115.     New NNTP connections to innd must clear any old WIP.
  116.     Add "p" item to newsfeeds "A" flag; document slave use.
  117.     rmgroups propagate like newgroups.
  118.     ctlinnd 'addhist' must open history if server not running.
  119.     innd clobbered memory on some reloads.
  120.     Copy SetDescriptorLimit into inndstart.
  121.     Make LIST case-insensitive in innd.
  122.     Add hosts.nntp.nolimit
  123.     Check PID file before innd starts up.
  124.  
  125.  
  126.  
  127. Index: BUILD
  128. ===================================================================
  129. RCS file: RCS/BUILD,v
  130. retrieving revision 1.8
  131. diff -c1 -r1.8 BUILD
  132. *** 1.8    1993/01/29 16:42:04
  133. --- BUILD    1993/03/18 21:03:04
  134. ***************
  135. *** 1,3 ****
  136.   #! /bin/sh
  137. ! ##  $Revision: 1.8 $
  138.   ##  An interactive script to configure, build, and install InterNetNews.
  139. --- 1,3 ----
  140.   #! /bin/sh
  141. ! ##  $Revision: 1.9 $
  142.   ##  An interactive script to configure, build, and install InterNetNews.
  143. ***************
  144. *** 6,7 ****
  145. --- 6,9 ----
  146.   
  147. + UMASK=${INN_UMASK-027}
  148.   if [ ! -f config/config.data ] ; then
  149. ***************
  150. *** 20,21 ****
  151. --- 22,26 ----
  152.   echo '       is "safer."  This usually means recompiling.'
  153. + echo ''
  154. + echo '       You cannot install over a running system; this script will'
  155. + echo '       remind you about this later.'
  156.   
  157. ***************
  158. *** 137,138 ****
  159. --- 142,147 ----
  160.   
  161. + umask ${UMASK}
  162. + echo ''
  163. + echo 'Setting umask to' `umask`
  164.   echo ''
  165. ***************
  166. *** 149,150 ****
  167. --- 158,162 ----
  168.   echo ''
  169. + echo 'You are now ready to install the INN programs and config files.'
  170. + echo 'You CANNOT DO THIS if INN is running now -- you must shut down'
  171. + echo 'your news system first.'
  172.   echo 'Do you want to continue with the installation [y or n]?  ' | tr -d '\012'
  173. ***************
  174. *** 165,167 ****
  175.   echo 'and inndstart, for example.  If the following "make" fails, do this:'
  176. ! echo '    su -c "make update"'
  177.   echo 'and rerun this script.'
  178. --- 177,179 ----
  179.   echo 'and inndstart, for example.  If the following "make" fails, do this:'
  180. ! echo '    echo make update | su'
  181.   echo 'and rerun this script.'
  182. ***************
  183. *** 267,269 ****
  184.   HERE=`/bin/pwd`
  185. ! cd ${NEWSLIB}
  186.   ${NEWSBIN}/makehistory ${FLAGS} || {
  187. --- 279,282 ----
  188.   HERE=`/bin/pwd`
  189. ! HISTORYDIR=`echo ${HISTORY} | sed -e 's@\(.*\)/.*@\1@'`
  190. ! cd ${HISTORYDIR}
  191.   ${NEWSBIN}/makehistory ${FLAGS} || {
  192. ***************
  193. *** 276,277 ****
  194. --- 289,292 ----
  195.   cd ${HERE}
  196. + sh ./installit.sh ${OWNERS} -m 0664 ${HISTORY}.dir ${HISTORY}.dir
  197. + sh ./installit.sh ${OWNERS} -m 0664 ${HISTORY}.pag ${HISTORY}.pag
  198.   
  199.  
  200.  
  201. Index: Install.ms.1
  202. ===================================================================
  203. RCS file: RCS/Install.ms.1,v
  204. retrieving revision 1.11
  205. diff -c -c1 -r1.11 Install.ms.1
  206. *** 1.11    1993/01/29 16:42:05
  207. --- Install.ms.1    1993/03/19 17:50:08
  208. ***************
  209. *** 1,2 ****
  210. ! .\" $Revision: 1.11 $
  211.   .\" Uses the -ms macro package; e.g., "nroff -ms Install.ms | col >Install.out"
  212. --- 1,2 ----
  213. ! .\" $Revision: 1.13 $
  214.   .\" Uses the -ms macro package; e.g., "nroff -ms Install.ms | col >Install.out"
  215. ***************
  216. *** 40,42 ****
  217.   ..
  218. ! .R$ $Id: Install.ms.1,v 1.11 1993/01/29 16:42:05 rsalz Exp $
  219.   .AE
  220. --- 40,42 ----
  221.   ..
  222. ! .R$ $Id: Install.ms.1,v 1.13 1993/03/19 17:49:59 rsalz Exp $
  223.   .AE
  224. ***************
  225. *** 468,470 ****
  226.   This will be either a ``struct\ direct'' or a ``struct\ dirent'';
  227. ! so set this to ``DIRECT'' or ``DIRECT'' as appropriate.
  228.   .PP
  229. --- 468,470 ----
  230.   This will be either a ``struct\ direct'' or a ``struct\ dirent'';
  231. ! set the parameter to ``DIRECT'' or ``DIRENT'' as appropriate.
  232.   .PP
  233. ***************
  234. *** 547,548 ****
  235. --- 547,550 ----
  236.   You should at least look through the parameters up to \fIVERIFY_CANCELS\fP.
  237. + (If set to ``DO'', then \fIinnd\fP will ignore cancel messages unless
  238. + the From or Sender header match those of the original poster.)
  239.   In general, however, you can leave this section pretty much alone until you
  240. ***************
  241. *** 549,552 ****
  242.   have some experience running INN.
  243.   .PP
  244. ! \fIInnd\fP can use memory-map the \fIactive\fP file if you set
  245.   \fIACT_STYLE\fP to ``MMAP''.
  246. --- 551,555 ----
  247.   have some experience running INN.
  248. + Nevertheless, here are some comments on some of the more useful parameters.
  249.   .PP
  250. ! \fIInnd\fP can memory-map the \fIactive\fP file if you set
  251.   \fIACT_STYLE\fP to ``MMAP''.
  252. ***************
  253. *** 558,560 ****
  254.   any new news has come in.
  255. ! The best work-around is probably an hourly cron job that touches the
  256.   \fIactive\fP file.
  257. --- 561,564 ----
  258.   any new news has come in.
  259. ! (\fINnmaster\fP is part of the \fInn\fP newsreading program.)
  260. ! The best work-around is probably an hourly \fIcron\fP job that touches the
  261.   \fIactive\fP file.
  262. ***************
  263. *** 561,562 ****
  264. --- 565,593 ----
  265.   .PP
  266. + There are a number of parameters that control the behavior of \fIrnews\fP.
  267. + If you set \fIRNEWS_SAVE_BAD\fP to ``DO'' then articles that \fIinnd\fP
  268. + rejects for reasons like bad headers will be saved in the \fI_PATH_BADNEWS\fP
  269. + directory; you will have to periodically scan this directory and clean
  270. + it up.
  271. + You can also control how \fIrnews\fP logs duplicates (those aren't saved
  272. + regardless of the value of \fIRNEWS_SAVE_BAD\fP), logging them through
  273. + \fIsyslog\fP, to a file, or not.
  274. + Note that if you set \fIRNEWS_LOG_DUPS\fP to ``FILE'', then you will want
  275. + to change \fI_PATH_RNEWS_DUP_LOG\fP, which appears later in the file.
  276. + If you receive news from several UUCP feeds, you might want to log duplicates
  277. + so that you can cut down your phone bills by optimizing your feeds.
  278. + The \fIRNEWSPROGS\fP parameter says whether or not to look in
  279. + \fI_PATH_NEWSPROGS\fP for commands named on the incoming ``#!'' line of
  280. + news batches.
  281. + You probably want to set this to ``DO''.
  282. + Make sure that the full pathname of \fIrnews\fP, \fI_PATH_RNEWS\fP,
  283. + does not conflict with the directory where your unpackers are put,
  284. + \fI_PATH_NEWSPROGS\fP.
  285. + .PP
  286. + If \fIIPADDR_LOG\fP is set to ``DO'' then the news log will report the IP
  287. + address of hosts that send articles, rather then what they put in the Path
  288. + line.
  289. + This can be useful if you run \fIinnd\fP with the ``\-a'' flag.
  290. + (If you do this, you might want to pick up ``hf.tar.Z'' via anonymous
  291. + FTP to ee.lbl.gov; it is a filter that turns IP addresses into host names.)
  292. + .PP
  293.   The \fIxxx_TIMEOUT\fP parameters control various timers within INN;
  294. ***************
  295. *** 722,725 ****
  296.   articles, and when it should start again.
  297. ! You will have to examine \fIsite/innwatch.ctl\fP and probably modify it.
  298. ! For example, the output of \fIdf\fP varies among different systems.
  299.   .PP
  300. --- 753,766 ----
  301.   articles, and when it should start again.
  302. ! You will have to examine \fIsite/innwatch.ctl\fP and probably modify it,
  303. ! usually to check the amount of free space on the disks.
  304. ! For example, there is a line in the file that has this fragment in it:
  305. ! .DS
  306. ! !!! df . | awk 'NR == 2 { print $4 }' ! ...
  307. ! .DE
  308. ! This is looking at the fourth field of the second line to get the amount
  309. ! of freespace.
  310. ! You will have to change the ``2'' and ``4'' here, and on other lines, as
  311. ! appropriate for your system.
  312. ! (Changing the output of \fIdf\fP seems to be one of the things vendors like
  313. ! to do most; it is not worth my time to have INN keep track of all of them.)
  314.   .PP
  315. ***************
  316. *** 753,756 ****
  317.   .PP
  318. - .UL "AIX"
  319.   .DS
  320.   .ta \w'HAVE_ST_BLKSIZE   'u
  321. --- 794,797 ----
  322.   .PP
  323.   .DS
  324. + .UL "AIX"
  325.   .ta \w'HAVE_ST_BLKSIZE   'u
  326. ***************
  327. *** 776,779 ****
  328.   .PP
  329. - .UL "A/UX"
  330.   .DS
  331.   .ta \w'HAVE_ST_BLKSIZE   'u
  332. --- 817,820 ----
  333.   .PP
  334.   .DS
  335. + .UL "A/UX"
  336.   .ta \w'HAVE_ST_BLKSIZE   'u
  337. ***************
  338. *** 784,787 ****
  339.   .PP
  340. - .UL "BSDI"
  341.   .DS
  342.   ABORTVAL    void
  343. --- 825,828 ----
  344.   .PP
  345.   .DS
  346. + .UL "BSDI"
  347.   ABORTVAL    void
  348. ***************
  349. *** 802,803 ****
  350. --- 843,845 ----
  351.   _PATH_MAILCMD    /usr/bin/Mail
  352. + _PATH_SENDMAIL    /usr/sbin/sendmail -t
  353.   PID_T    pid_t
  354. ***************
  355. *** 811,826 ****
  356.   .DE
  357. ! At least the pre-release versions of BSDI have a number of problems.
  358. ! You must install and use \fIbash\fP to run the \fIiftrue.sh\fP script
  359. ! (see \fIconfig/Makefile\fP and \fIlib/Makefile\fP).
  360. ! You must change \fIsamples/rc.news\fP so that it doesn't call ``su\ -c''
  361. ! and doesn't try to run \fIinnwatch\fP.
  362. ! Finally, the default maximum data segment size is too small for \fIinnd\fP.
  363. ! Finally, you must either add a \fIsetrlimit\fP call to \fIinnd/innd.c\fP
  364. ! or add the following line to your config and rebuild your kernel:
  365. ! .DS
  366. ! options "DFLDSIZ=33554432"      # 32 MB data space
  367. ! .DE
  368.   .PP
  369. - .UL "HP-UX 8.0"
  370.   .DS
  371.   .ta \w'HAVE_ST_BLKSIZE   'u
  372. --- 853,863 ----
  373.   .DE
  374. ! Change the \fISHELL\fP variable in \fIconfig/Makefile\fP and
  375. ! \fIsite/Makefile\fP to point to \fI/usr/contrib/bin/bash\fP.
  376. ! Edit \fIlib/Makefile\fP so that the \fIinstall\fP target does not
  377. ! try to make \fI../llib-linn.ln\fP.
  378. ! You must also use the GNU \fIsed\fP; the version distributed with
  379. ! BSDI 0.9.4.1 enters an infinite loop processing newgroup messages.
  380.   .PP
  381.   .DS
  382. + .UL "HP-UX 8.0"
  383.   .ta \w'HAVE_ST_BLKSIZE   'u
  384. ***************
  385. *** 863,866 ****
  386.   .PP
  387. - .UL "SGI Indigo with IRIX 4.0.1"
  388.   .DS
  389.   .ta \w'HAVE_ST_BLKSIZE   'u
  390. --- 900,903 ----
  391.   .PP
  392.   .DS
  393. + .UL "SGI Indigo with IRIX 4.0.1"
  394.   .ta \w'HAVE_ST_BLKSIZE   'u
  395. ***************
  396. *** 894,897 ****
  397.   .PP
  398. - .UL "Solaris 2.X/SunOS 5.X, using SPARCompiler C 2.X"
  399.   .DS
  400.   .ta \w'HAVE_ST_BLKSIZE   'u
  401. --- 931,934 ----
  402.   .PP
  403.   .DS
  404. + .UL "Solaris 2.X/SunOS 5.X, using SPARCompiler C 2.X"
  405.   .ta \w'HAVE_ST_BLKSIZE   'u
  406. ***************
  407. *** 938,941 ****
  408.   .PP
  409. - .UL "System V Release 4"
  410.   .DS
  411.   .ta \w'HAVE_ST_BLKSIZE   'u
  412. --- 975,978 ----
  413.   .PP
  414.   .DS
  415. + .UL "System V Release 4"
  416.   .ta \w'HAVE_ST_BLKSIZE   'u
  417. ***************
  418. *** 973,976 ****
  419.   .PP
  420. - .UL "Ultrix 4.x (RISC)"
  421.   .DS
  422.   .ta \w'HAVE_ST_BLKSIZE   'u
  423. --- 1010,1013 ----
  424.   .PP
  425.   .DS
  426. + .UL "Ultrix 4.x (RISC)"
  427.   .ta \w'HAVE_ST_BLKSIZE   'u
  428. ***************
  429. *** 1319,1320 ****
  430. --- 1356,1361 ----
  431.   .PP
  432. + If you are currently running C News, note that it has a directory named
  433. + \fIexpire\fP that is often the same pathname as INN's \fIexpire\fP program.
  434. + You will have to move, or remove, the directory before you can intall
  435. + the INN program.
  436.   .NH 3
  437. ***************
  438. *** 1381,1382 ****
  439. --- 1422,1433 ----
  440.   any configuration files or scripts.
  441. + This is important:  in any directory (including the top-level one), a
  442. + \&``make\ install'' will install everything in that directory into
  443. + the right place.
  444. + A ``make\ update'' can only be done in the top-level directory or in the
  445. + \fIsite\fP directory, and it only replaces scripts, not configuration files.
  446. + When updating to a new INN release, you will probably want to do an ``update''
  447. + first, and then review the changed files by doing ``make\ diff'' in the
  448. + \fIsite\fP directory, and integrate your local changes as appropriate.
  449. + The Makefile also has other targets that you might find useful, so the
  450. + comments for entries like ``most'' and ``installed-diff', for example.
  451.   .PP
  452. ***************
  453. *** 1463,1467 ****
  454.   .ta 1.5i
  455. ! ctlrun    logwatch
  456. ! inncheck    makegroup
  457. ! innwatch    scanspool
  458.   .DE
  459. --- 1514,1518 ----
  460.   .ta 1.5i
  461. ! ctlrun    makegroup
  462. ! inncheck    scanspool
  463. ! innwatch
  464.   .DE
  465. ***************
  466. *** 1477,1481 ****
  467.   You might have to edit it to understand your \fIdf\fP output format.
  468. - \fILogwatch\fP sends mail when a file gets new data; you can
  469. - run this from \fIrc.news\fP and configure it to watch the \fIsyslog\fP
  470. - \&``news.crit'' file which will notify you when \fIinnd\fP shuts down.
  471.   \fIMakegroup\fP is a front-end to \fIrnews\fP that helps you write
  472. --- 1528,1529 ----
  473. ***************
  474. *** 1494,1497 ****
  475.   .DE
  476.   .PP
  477. ! There are now only two things to check.
  478.   First, make sure you have an \fIactive\fP file and a \fIhistory\fP database!
  479. --- 1542,1549 ----
  480.   .DE
  481. + Make sure you have \fIrc.news\fP installed in the right place, as explained
  482. + in the ``Paths to common programs'' section, above.
  483. + You might find it useful to read the ``First-Time Usenet or NNTP Installation''
  484. + appendix for help on navigating through the INN configuration files.
  485.   .PP
  486. ! There are now only a couple more things to check.
  487.   First, make sure you have an \fIactive\fP file and a \fIhistory\fP database!
  488. ***************
  489. *** 1505,1507 ****
  490.   .PP
  491. ! Once you have done that, InterNetNews is now installed, and ready
  492.   to run \(em have fun!
  493. --- 1557,1559 ----
  494.   .PP
  495. ! Once you have done all of this, InterNetNews is now installed, and ready
  496.   to run \(em have fun!
  497.  
  498.  
  499. Index: Install.ms.2
  500. ===================================================================
  501. RCS file: RCS/Install.ms.2,v
  502. retrieving revision 1.9
  503. diff -c1 -r1.9 Install.ms.2
  504. *** 1.9    1993/01/29 16:42:07
  505. --- Install.ms.2    1993/03/18 21:03:11
  506. ***************
  507. *** 1,2 ****
  508. ! .\" $Revision: 1.9 $
  509.   .NH 1
  510. --- 1,2 ----
  511. ! .\" $Revision: 1.10 $
  512.   .NH 1
  513. ***************
  514. *** 39,41 ****
  515.   a sequence of ``throttle'' and ``go'' commands.
  516. ! It does not apepar to be related to the bug mentioned above, although
  517.   the symptom is the same.
  518. --- 39,41 ----
  519.   a sequence of ``throttle'' and ``go'' commands.
  520. ! It does not appear to be related to the bug mentioned above, although
  521.   the symptom is the same.
  522. ***************
  523. *** 88,89 ****
  524. --- 88,98 ----
  525.   .PP
  526. + On some SVR4 systems, attempting to set the socket buffer size is either
  527. + not supported or, even worse, might result in \fIinnd\fP's data size
  528. + growing.
  529. + The most noticeable symptom is ``cant setsockopt(SNDBUF)'' messages in
  530. + your \fIsyslog\fP output.
  531. + To fix this, either comment out the calls to \fIsetsockopt\fP in
  532. + \fIinnd/nc.c\fP or add ``\-USO_SNDBUF'' to your \fIDEFS\fP config
  533. + parameter.
  534. + .PP
  535.   I have heard that Sony SVR4 systems have lots of problems.
  536. ***************
  537. *** 97,98 ****
  538. --- 106,120 ----
  539.   result in mail saying that they are unparseable.
  540. + .PP
  541. + Some versions of the shell in HP-UX do not properly parse a quoted ``[''
  542. + when it is in a pattern for a \fIcase\fP statement.
  543. + The most noticeable symptom is that \fInews.daily\fP does not properly
  544. + expire articles if \fIinnwatch\fP has throttled the server.
  545. + Contact HP and get a fix for SR # 5003-009811.
  546. + .PP
  547. + On some versions of AIX on the RS/6000, using memory-mapping can eat
  548. + up all the page space or crash the machine.
  549. + This will be noticeable if you have \fIACT_STYLE\fP set to ``MMAP'' and/or
  550. + have ``-DMMAP'' in \fIDBZCFLAGS\fP.
  551. + Ask your IBM representative for the ``U413090'' PTF and prerequisites to
  552. + apply it; it is believed that this will fix it.
  553.   .bp
  554. ***************
  555. *** 174,176 ****
  556.   Note that this will accept \fIeverything\fP.
  557. ! Because there is no subscription list, you cannot't say ``give me all of the
  558.   foo hierarchy (filed into junk), but not the alt hierarchy.''
  559. --- 196,198 ----
  560.   Note that this will accept \fIeverything\fP.
  561. ! Because there is no subscription list, you cannot say ``give me all of the
  562.   foo hierarchy (filed into junk), but not the alt hierarchy.''
  563. ***************
  564. *** 295,297 ****
  565.   This includes \fIxvnews\fP, \fIxrn\fP, \fIrrn\fP and so on.
  566. ! INN implements the standard NNTP protocol.
  567.   INN does not provide the extensions used by \fItrn\fP, \fItin\fP or
  568. --- 317,319 ----
  569.   This includes \fIxvnews\fP, \fIxrn\fP, \fIrrn\fP and so on.
  570. ! INN implements the standard NNTP protocol, with some extensions.
  571.   INN does not provide the extensions used by \fItrn\fP, \fItin\fP or
  572. ***************
  573. *** 445,446 ****
  574. --- 467,471 ----
  575.   .DE
  576. + If you do not remove the \fIexpire\fP directory, you will probably have
  577. + problems installing INN's \fIexpire\fP, which is a program that often
  578. + has the same name as the C News directory.
  579.   .PP
  580. ***************
  581. *** 641,642 ****
  582. --- 666,671 ----
  583.   .PP
  584. + Since the \fInnrpd\fP on the slave host will usually add its name to
  585. + the Path header, you should add ``Ap'' to the \fIflags\fP field of
  586. + the slave's entry on the master.
  587. + .PP
  588.   Once the slave has been set up it is necessary to have the master feed it.
  589. ***************
  590. *** 743,744 ****
  591. --- 772,776 ----
  592.   up any stalled batches.
  593. + Finally, if your feeds change IP address, you might want a daily job
  594. + that does ``ctlinnd reload hosts.nntp "flush cache"''.
  595. + This is because \fIinnd\fP does not currently time-out DNS entries.
  596.   .PP
  597. ***************
  598. *** 759,761 ****
  599.   .SH
  600. ! Appendix V:  Limited MIME Support
  601.   .PP
  602. --- 791,845 ----
  603.   .SH
  604. ! Appendix V:  News overview database
  605. ! .PP
  606. ! There are now many newsreaders available that are able to do ``threading.''
  607. ! This is the ability to track a discussion within a newsgroup by using
  608. ! the References header (or other data), regardless of changes in headers
  609. ! like the Subject line.
  610. ! Examples of these readers include \fInn\fP, \fItrn\fP, and \fIgnus\fP,
  611. ! and more are becoming available.
  612. ! Until recently, a major problem with these readers is that they all
  613. ! required a specialized external database that contained the threading
  614. ! data.
  615. ! .PP
  616. ! In late 1992, Geoff Collyer <geoff@world.std.com> released the \fInov\fP,
  617. ! or ``news overview,'' package.
  618. ! This included database tools and, and client access routines,
  619. ! that let the current threaded newsreaders use a common, textual,
  620. ! database.
  621. ! An overview database typically adds adds about 7-9% to your storage
  622. ! requirements.
  623. ! By default, the overview files are stored in the spool directory;
  624. ! you can change this to use an alternate tree that mirrors the spool
  625. ! hierarchy by changing the \fI_PATH_OVERVIEWDIR\fP parameter.
  626. ! .PP
  627. ! INN includes full support for creating and expiring news overview databases.
  628. ! To do this, add an entry like the following to your \fInewsfeeds\fP file:
  629. ! .DS
  630. ! overview:*:Tc,WO:/path/to/bin/overchan
  631. ! .DE
  632. ! (Make sure to replace \fI/path/to/bin\fP with the value of your
  633. ! \fI_PATH_NEWSBIN\fP parameter.)
  634. ! Then reload the \fInewsfeeds\fP file or restart your server.
  635. ! To create the initial database, run the following command after you have
  636. ! started \fIoverchan\fP:
  637. ! .DS
  638. ! expireover -a -s
  639. ! .DE
  640. ! You will also need to expire the overview data.
  641. ! The easiest way to do this is to add the ``expireover'' keyword to
  642. ! the \fIcron\fP job that runs \fInews.daily\fP.
  643. ! .PP
  644. ! The \fInnrpd\fP server includes two command extensions to access the database;
  645. ! they are documented in the ``protocol extensions'' part of \fIdoc/nnrpd.8\fP.
  646. ! INN does not include any client code or modifications to any newsreaders
  647. ! to use the overview data.
  648. ! Most maintainers have agreed to support the overview database, including
  649. ! the INN extensions for remote access.
  650. ! You can find prototype versions of many readers (work done by Geoff) on
  651. ! world.std.com in the directory src/news; look for files named
  652. ! \fIreader\fP.dist.tar.Z.
  653. ! .\"
  654. ! .bp
  655. ! .SH
  656. ! Appendix VI:  Limited MIME Support
  657.   .PP
  658.  
  659.  
  660. Index: MANIFEST
  661. ===================================================================
  662. RCS file: RCS/MANIFEST,v
  663. retrieving revision 1.43
  664. diff -r1.43 MANIFEST
  665. 5,7c5,7
  666. < BUILD                      3    Script to build and install the system
  667. < COPYRIGHT                 29    Legal mumbo-jumbo
  668. < HISTORY                   16    Messages of historical significance
  669. ---
  670.  
  671.  
  672. Index: Makefile
  673. ===================================================================
  674. RCS file: RCS/Makefile,v
  675. retrieving revision 1.32
  676. diff -c1 -r1.32 Makefile
  677. *** 1.32    1993/01/29 16:42:12
  678. --- Makefile    1993/03/18 21:03:16
  679. ***************
  680. *** 1,2 ****
  681. ! ##  $Revision: 1.32 $
  682.   SHELL    = /bin/sh
  683. --- 1,2 ----
  684. ! ##  $Revision: 1.33 $
  685.   SHELL    = /bin/sh
  686. ***************
  687. *** 34,36 ****
  688.   directories:
  689. !     sh ./makedirs.sh
  690.   
  691. --- 34,36 ----
  692.   directories:
  693. !     $(SHELL) ./makedirs.sh
  694.   
  695. ***************
  696. *** 99,101 ****
  697.   shar:
  698. !     makekit -m -k40 -s60k
  699.   tar:
  700. --- 99,101 ----
  701.   shar:
  702. !     makekit -m -k40 -s70k
  703.   tar:
  704. ***************
  705. *** 103,105 ****
  706.       @rcs -l MANIFEST
  707. !     makekit -m -k40 -s60k -x
  708.       tar cf inn.tar `sed $(SEDCOMMANDS) <MANIFEST`
  709. --- 103,105 ----
  710.       @rcs -l MANIFEST
  711. !     makekit -m -k40 -s70k -x
  712.       tar cf inn.tar `sed $(SEDCOMMANDS) <MANIFEST`
  713.  
  714.  
  715. Index: README
  716. ===================================================================
  717. RCS file: RCS/README,v
  718. retrieving revision 1.26
  719. diff -c1 -r1.26 README
  720. *** 1.26    1993/01/29 16:42:13
  721. --- README    1993/03/18 21:12:26
  722. ***************
  723. *** 1,2 ****
  724. ! $Revision: 1.26 $
  725.   
  726. --- 1,2 ----
  727. ! $Revision: 1.28 $
  728.   
  729. ***************
  730. *** 40,43 ****
  731.   When updating from a previous release, you will usually want to do "make
  732. ! update" from the top-level directory.  If/when you do "make install" in
  733. ! the site directory, watch what it does carefully!
  734.   
  735. --- 40,51 ----
  736.   When updating from a previous release, you will usually want to do "make
  737. ! update" from the top-level directory; this will only install the programs.
  738. ! To update your scripts and config files, cd into the "site" directory and
  739. ! do "make clean" -- this will remove any files that are unchanged from
  740. ! the official release.  Then do "make diff >diff"; this will show you what
  741. ! changes you will have to merge in.  Now merge in your changes (from
  742. ! where the files are, ie. /usr/lib/news...) into the files in
  743. ! $INN/site.  (You may find that due to the bug fixes and new features in
  744. ! this release, you may not need to change any of the scripts, just the
  745. ! configuration files).  Finally, doing "make install" will install
  746. ! everything.
  747.   
  748. ***************
  749. *** 68,72 ****
  750.   internally, if it exists, making certain commands (e.g., XHDR) much
  751. ! faster.  The nov package includes patches to various newsreaders and a
  752. ! client library.  It is available on world.std.com in the file
  753. ! src/news/nov.dist.tar.Z.
  754.   
  755. --- 76,84 ----
  756.   internally, if it exists, making certain commands (e.g., XHDR) much
  757. ! faster.  The nov package includes a newsreader library that you will need,
  758. ! and some utilities that you will not; it is available on world.std.com in
  759. ! the file src/news/nov.dist.tar.Z.  Prototypes of modified newsreaders are
  760. ! in the in src/news/READER.dist.tar.Z -- most maintainers will be providing
  761. ! official support very soon.  To make it explicit:  if you already have a
  762. ! newsreader that can use the overview database, either via my NNTP xover
  763. ! command, or by reading directly from NFS, then INN has all you need.
  764.   
  765.  
  766.  
  767. Index: backends/Makefile
  768. ===================================================================
  769. RCS file: backends/RCS/Makefile,v
  770. retrieving revision 1.16
  771. diff -c1 -r1.16 backends/Makefile
  772. *** 1.16    1993/01/29 16:42:14
  773. --- backends/Makefile    1993/03/18 21:03:19
  774. ***************
  775. *** 1,2 ****
  776. ! ##  $Revision: 1.16 $
  777.   SHELL    = /bin/sh
  778. --- 1,2 ----
  779. ! ##  $Revision: 1.17 $
  780.   SHELL    = /bin/sh
  781. ***************
  782. *** 105,125 ****
  783.   $(NEWSBIN)/archive:    archive
  784. !     sh ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  785.   $(NEWSBIN)/batcher:    batcher
  786. !     sh ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  787.   $(NEWSBIN)/buffchan:    buffchan
  788. !     sh ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  789.   $(NEWSBIN)/cvtbatch:    cvtbatch
  790. !     sh ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  791.   $(NEWSBIN)/filechan:    filechan
  792. !     sh ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  793.   $(NEWSBIN)/nntpget:    nntpget
  794. !     sh ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  795.   $(NEWSBIN)/innxmit:    innxmit
  796. !     sh ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  797.   $(NEWSBIN)/overchan:    overchan
  798. !     sh ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  799.   $(NEWSBIN)/shlock:    shlock
  800. !     sh ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  801.   $(NEWSBIN)/shrinkfile:    shrinkfile
  802. !     sh ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  803.   
  804. --- 105,125 ----
  805.   $(NEWSBIN)/archive:    archive
  806. !     $(SHELL) ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  807.   $(NEWSBIN)/batcher:    batcher
  808. !     $(SHELL) ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  809.   $(NEWSBIN)/buffchan:    buffchan
  810. !     $(SHELL) ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  811.   $(NEWSBIN)/cvtbatch:    cvtbatch
  812. !     $(SHELL) ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  813.   $(NEWSBIN)/filechan:    filechan
  814. !     $(SHELL) ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  815.   $(NEWSBIN)/nntpget:    nntpget
  816. !     $(SHELL) ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  817.   $(NEWSBIN)/innxmit:    innxmit
  818. !     $(SHELL) ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  819.   $(NEWSBIN)/overchan:    overchan
  820. !     $(SHELL) ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  821.   $(NEWSBIN)/shlock:    shlock
  822. !     $(SHELL) ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  823.   $(NEWSBIN)/shrinkfile:    shrinkfile
  824. !     $(SHELL) ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  825.   
  826. ***************
  827. *** 175,176 ****
  828. --- 175,182 ----
  829.   nntpget.o:    ../include/paths.h
  830. + overchan.o:    ../include/configdata.h
  831. + overchan.o:    ../include/libinn.h
  832. + overchan.o:    ../include/clibrary.h
  833. + overchan.o:    ../include/macros.h
  834. + overchan.o:    ../include/paths.h
  835. + overchan.o:    ../include/qio.h
  836.   shlock.o:    ../include/clibrary.h
  837.  
  838.  
  839. Index: backends/archive.c
  840. ===================================================================
  841. RCS file: backends/RCS/archive.c,v
  842. retrieving revision 1.6
  843. diff -c1 -r1.6 backends/archive.c
  844. *** 1.6    1993/01/29 16:42:16
  845. --- backends/archive.c    1993/03/18 21:03:21
  846. ***************
  847. *** 1,2 ****
  848. ! /*  $Revision: 1.6 $
  849.   **
  850. --- 1,2 ----
  851. ! /*  $Revision: 1.7 $
  852.   **
  853. ***************
  854. *** 266,267 ****
  855. --- 266,268 ----
  856.       Redirect = TRUE;
  857. +     (void)umask(NEWSUMASK);
  858.   
  859.  
  860.  
  861. Index: backends/batcher.c
  862. ===================================================================
  863. RCS file: backends/RCS/batcher.c,v
  864. retrieving revision 1.16
  865. diff -c1 -r1.16 backends/batcher.c
  866. *** 1.16    1993/01/29 16:42:18
  867. --- backends/batcher.c    1993/03/18 21:03:24
  868. ***************
  869. *** 1,2 ****
  870. ! /*  $Revision: 1.16 $
  871.   **
  872. --- 1,2 ----
  873. ! /*  $Revision: 1.17 $
  874.   **
  875. ***************
  876. *** 242,243 ****
  877. --- 242,244 ----
  878.       Redirect = TRUE;
  879. +     (void)umask(NEWSUMASK);
  880.   
  881.  
  882.  
  883. Index: backends/buffchan.c
  884. ===================================================================
  885. RCS file: backends/RCS/buffchan.c,v
  886. retrieving revision 1.8
  887. diff -c1 -r1.8 backends/buffchan.c
  888. *** 1.8    1993/01/29 16:42:20
  889. --- backends/buffchan.c    1993/03/18 21:03:26
  890. ***************
  891. *** 1,2 ****
  892. ! /*  $Revision: 1.8 $
  893.   **
  894. --- 1,2 ----
  895. ! /*  $Revision: 1.9 $
  896.   **
  897. ***************
  898. *** 4,7 ****
  899.   */
  900. - #include <sys/types.h>
  901. - #include <signal.h>
  902.   #include "configdata.h"
  903. --- 4,5 ----
  904. ***************
  905. *** 8,9 ****
  906. --- 6,10 ----
  907.   #include <stdio.h>
  908. + #include <sys/types.h>
  909. + #include <sys/stat.h>
  910. + #include <signal.h>
  911.   #include <ctype.h>
  912. ***************
  913. *** 32,33 ****
  914. --- 33,35 ----
  915.   typedef struct _SITE {
  916. +     BOOL    Dropped;
  917.       STRING    Name;
  918. ***************
  919. *** 165,166 ****
  920. --- 167,169 ----
  921.       sp->LastClosed = Now.time;
  922. +     sp->Dropped = FALSE;
  923.   }
  924. ***************
  925. *** 232,234 ****
  926.       }
  927. !     SITEopen(sp);
  928.   }
  929. --- 235,238 ----
  930.       }
  931. !     if (!sp->Dropped)
  932. !     SITEopen(sp);
  933.   }
  934. ***************
  935. *** 306,307 ****
  936. --- 310,315 ----
  937.   
  938. +     if (*p == 'b' && EQn(p, "begin", 5))
  939. +     /* No-op. */
  940. +     return;
  941.       if (*p == 'f' && EQn(p, "flush", 5)) {
  942. ***************
  943. *** 326,329 ****
  944.           (void)fprintf(stderr, "buffchan drop %s unknown site\n", p);
  945. !     else
  946.           SITEclose(sp);
  947.       return;
  948. --- 334,339 ----
  949.           (void)fprintf(stderr, "buffchan drop %s unknown site\n", p);
  950. !     else {
  951.           SITEclose(sp);
  952. +         sp->Dropped = TRUE;
  953. +     }
  954.       return;
  955. ***************
  956. *** 378,379 ****
  957. --- 388,390 ----
  958.       BOOL        Redirect;
  959. +     FILE        *F;
  960.   
  961. ***************
  962. *** 385,386 ****
  963. --- 396,398 ----
  964.       GotInterrupt = FALSE;
  965. +     (void)umask(NEWSUMASK);
  966.   
  967. ***************
  968. *** 394,396 ****
  969.       /* Parse JCL. */
  970. !     while ((i = getopt(ac, av, "bc:C:d:f:l:L:m:rs:u")) != EOF)
  971.       switch (i) {
  972. --- 406,408 ----
  973.       /* Parse JCL. */
  974. !     while ((i = getopt(ac, av, "bc:C:d:f:l:L:m:p:rs:u")) != EOF)
  975.       switch (i) {
  976. ***************
  977. *** 426,427 ****
  978. --- 438,452 ----
  979.           MAPread(Map);
  980. +         break;
  981. +     case 'p':
  982. +         if ((F = fopen(optarg, "w")) == NULL) {
  983. +         (void)fprintf(stderr, "buffchan cant fopen %s %s\n",
  984. +             optarg, strerror(errno));
  985. +         exit(1);
  986. +         }
  987. +         (void)fprintf(F, "%ld\n", (long)getpid());
  988. +         if (ferror(F) || fclose(F) == EOF) {
  989. +         (void)fprintf(stderr, "buffchan cant fclose %s %s\n",
  990. +             optarg, strerror(errno));
  991. +         exit(1);
  992. +         }
  993.           break;
  994.  
  995.  
  996. Index: backends/filechan.c
  997. ===================================================================
  998. RCS file: backends/RCS/filechan.c,v
  999. retrieving revision 1.11
  1000. diff -c1 -r1.11 backends/filechan.c
  1001. *** 1.11    1992/08/14 20:36:58
  1002. --- backends/filechan.c    1993/03/18 21:03:27
  1003. ***************
  1004. *** 1,2 ****
  1005. ! /*  $Revision: 1.11 $
  1006.   **
  1007. --- 1,2 ----
  1008. ! /*  $Revision: 1.12 $
  1009.   **
  1010. ***************
  1011. *** 33,34 ****
  1012. --- 33,35 ----
  1013.       BOOL        Map;
  1014. +     FILE        *F;
  1015.       struct stat        Sb;
  1016. ***************
  1017. *** 43,44 ****
  1018. --- 44,46 ----
  1019.       myuid = geteuid();
  1020. +     (void)umask(NEWSUMASK);
  1021.   
  1022. ***************
  1023. *** 45,47 ****
  1024.       /* Parse JCL. */
  1025. !     while ((i = getopt(ac, av, "d:f:m:")) != EOF)
  1026.       switch (i) {
  1027. --- 47,49 ----
  1028.       /* Parse JCL. */
  1029. !     while ((i = getopt(ac, av, "d:f:m:p:")) != EOF)
  1030.       switch (i) {
  1031. ***************
  1032. *** 59,60 ****
  1033. --- 61,75 ----
  1034.           MAPread(optarg);
  1035. +         break;
  1036. +     case 'p':
  1037. +         if ((F = fopen(optarg, "w")) == NULL) {
  1038. +         (void)fprintf(stderr, "filechan cant fopen %s %s\n",
  1039. +             optarg, strerror(errno));
  1040. +         exit(1);
  1041. +         }
  1042. +         (void)fprintf(F, "%ld\n", (long)getpid());
  1043. +         if (ferror(F) || fclose(F) == EOF) {
  1044. +         (void)fprintf(stderr, "filechan cant fclose %s %s\n",
  1045. +             optarg, strerror(errno));
  1046. +         exit(1);
  1047. +         }
  1048.           break;
  1049.  
  1050.  
  1051. Index: backends/innxmit.c
  1052. ===================================================================
  1053. RCS file: backends/RCS/innxmit.c,v
  1054. retrieving revision 1.13
  1055. diff -c1 -r1.13 backends/innxmit.c
  1056. *** 1.13    1993/01/29 16:42:21
  1057. --- backends/innxmit.c    1993/03/18 21:03:28
  1058. ***************
  1059. *** 1,2 ****
  1060. ! /*  $Revision: 1.13 $
  1061.   **
  1062. --- 1,2 ----
  1063. ! /*  $Revision: 1.14 $
  1064.   **
  1065. ***************
  1066. *** 13,17 ****
  1067.   #include <sys/stat.h>
  1068. - #if    defined(LOCK_LOCKF)
  1069.   #include <fcntl.h>
  1070. - #endif    /* defined(LOCK_LOCKF) */
  1071.   #if    defined(DO_NEED_TIME)
  1072. --- 13,15 ----
  1073. ***************
  1074. *** 801,806 ****
  1075.       register QIOSTATE    *qp;
  1076. -     char        *Article;
  1077. -     char        *ContentEncoding;
  1078. -     char        *ContentType;
  1079. -     char        *MessageID;
  1080.       TIMEINFO        Now;
  1081. --- 799,800 ----
  1082. ***************
  1083. *** 809,810 ****
  1084. --- 803,810 ----
  1085.       char        buff[NNTP_STRLEN];
  1086. +     char        *AltSpool;
  1087. +     char        *Article;
  1088. +     char        *ContentEncoding;
  1089. +     char        *ContentType;
  1090. +     char        *MessageID;
  1091. +     char        *AltPath;
  1092.       SIGHANDLER        (*old)();
  1093. ***************
  1094. *** 816,817 ****
  1095. --- 816,819 ----
  1096.       TotalTimeout = 0;
  1097. +     AltSpool = NULL;
  1098. +     (void)umask(NEWSUMASK);
  1099.   
  1100. ***************
  1101. *** 818,820 ****
  1102.       /* Parse JCL. */
  1103. !     while ((i = getopt(ac, av, "adMprSt:T:v")) != EOF)
  1104.       switch (i) {
  1105. --- 820,822 ----
  1106.       /* Parse JCL. */
  1107. !     while ((i = getopt(ac, av, "A:adMprSt:T:v")) != EOF)
  1108.       switch (i) {
  1109. ***************
  1110. *** 823,824 ****
  1111. --- 825,830 ----
  1112.           /* NOTREACHED */
  1113. +     case 'A':
  1114. +         AltSpool = optarg;
  1115. +         AltPath = NEW(char, SPOOLNAMEBUFF + strlen(AltSpool));
  1116. +         break;
  1117.       case 'a':
  1118. ***************
  1119. *** 874,882 ****
  1120.       }
  1121. ! #if    defined(LOCK_LOCKF)
  1122. !     i = open(BATCHname, O_RDWR);
  1123. !     BATCHqp = i < 0 ? NULL : QIOfdopen(i, QIO_BUFFER);
  1124. ! #else
  1125. !     BATCHqp = QIOopen(BATCHname, QIO_BUFFER);
  1126. ! #endif    /* defined(LOCK_LOCKF) */
  1127. !     if (BATCHqp == NULL) {
  1128.       (void)fprintf(stderr, "Can't open \"%s\", %s\n",
  1129. --- 880,883 ----
  1130.       }
  1131. !     if ((i = open(BATCHname, O_RDWR)) < 0
  1132. !      || (BATCHqp = QIOfdopen(i, QIO_BUFFER)) == NULL) {
  1133.       (void)fprintf(stderr, "Can't open \"%s\", %s\n",
  1134. ***************
  1135. *** 1032,1034 ****
  1136.       /* Open the article. */
  1137. !     if ((qp = QIOopen(Article, QIO_BUFFER)) == NULL) {
  1138.           switch (errno) {
  1139. --- 1033,1042 ----
  1140.       /* Open the article. */
  1141. !     if ((qp = QIOopen(Article, QIO_BUFFER)) == NULL
  1142. !      && AltSpool
  1143. !      && *Article != '/') {
  1144. !         (void)sprintf(AltPath, "%s/%s", AltSpool, Article);
  1145. !         qp = QIOopen(AltPath, QIO_BUFFER);
  1146. !     }
  1147. !     if (qp == NULL) {
  1148.           switch (errno) {
  1149.  
  1150.  
  1151. Index: backends/nntpget.c
  1152. ===================================================================
  1153. RCS file: backends/RCS/nntpget.c,v
  1154. retrieving revision 1.7
  1155. diff -c1 -r1.7 backends/nntpget.c
  1156. *** 1.7    1993/01/29 16:42:23
  1157. --- backends/nntpget.c    1993/03/18 21:03:29
  1158. ***************
  1159. *** 1,2 ****
  1160. ! /*  $Revision: 1.7 $
  1161.   **  Connect to a remote site, and get news from it to offer to our local
  1162. --- 1,2 ----
  1163. ! /*  $Revision: 1.8 $
  1164.   **  Connect to a remote site, and get news from it to offer to our local
  1165. ***************
  1166. *** 3,5 ****
  1167.   **  server.  Read list on stdin, or get it via NEWNEWS command.  Writes
  1168. ! **  list of articles stil needed to stdout.
  1169.   */
  1170. --- 3,5 ----
  1171.   **  server.  Read list on stdin, or get it via NEWNEWS command.  Writes
  1172. ! **  list of articles still needed to stdout.
  1173.   */
  1174. ***************
  1175. *** 43,44 ****
  1176. --- 43,48 ----
  1177.   STATIC char        READER[] = "mode reader";
  1178. + STATIC unsigned long    STATgot;
  1179. + STATIC unsigned long    STAToffered;
  1180. + STATIC unsigned long    STATsent;
  1181. + STATIC unsigned long    STATrejected;
  1182.   
  1183. ***************
  1184. *** 197,199 ****
  1185.       (void)fprintf(stderr,
  1186. !     "Usage:  nntpget [ -d dist -n grps [-f file | -t time]] host\n");
  1187.       exit(1);
  1188. --- 201,203 ----
  1189.       (void)fprintf(stderr,
  1190. !     "Usage:  nntpget [ -d dist -n grps [-f file | -t time -u file]] host\n");
  1191.       exit(1);
  1192. ***************
  1193. *** 223,224 ****
  1194. --- 227,229 ----
  1195.       BOOL    Verbose;
  1196. +     char    *Update;
  1197.       char    *p;
  1198. ***************
  1199. *** 230,231 ****
  1200. --- 235,238 ----
  1201.       Offer = FALSE;
  1202. +     Update = NULL;
  1203. +     (void)umask(NEWSUMASK);
  1204.   
  1205. ***************
  1206. *** 232,234 ****
  1207.       /* Parse JCL. */
  1208. !     while ((i = getopt(ac, av, "d:f:n:t:ov")) != EOF)
  1209.       switch (i) {
  1210. --- 239,241 ----
  1211.       /* Parse JCL. */
  1212. !     while ((i = getopt(ac, av, "d:f:n:t:ovu:")) != EOF)
  1213.       switch (i) {
  1214. ***************
  1215. *** 240,241 ****
  1216. --- 247,251 ----
  1217.           break;
  1218. +     case 'u':
  1219. +         Update = optarg;
  1220. +         /* FALLTHROUGH */
  1221.       case 'f':
  1222. ***************
  1223. *** 242,244 ****
  1224.           if (Since)
  1225. !         Usage("Only one -t or -f flag");
  1226.           if (stat(optarg, &Sb) < 0) {
  1227. --- 252,254 ----
  1228.           if (Since)
  1229. !         Usage("Only one -f -t or -u flag");
  1230.           if (stat(optarg, &Sb) < 0) {
  1231. ***************
  1232. *** 300,302 ****
  1233.       if (distributions || Groups)
  1234. !         Usage("No -d or -g when reading stdin");
  1235.       }
  1236. --- 310,312 ----
  1237.       if (distributions || Groups)
  1238. !         Usage("No -d or -n when reading stdin");
  1239.       }
  1240. ***************
  1241. *** 376,377 ****
  1242. --- 386,388 ----
  1243.       while (fgets(mesgid, sizeof mesgid, F) != NULL) {
  1244. +     STATgot++;
  1245.       if ((p = strchr(mesgid, '\n')) != NULL)
  1246. ***************
  1247. *** 381,382 ****
  1248. --- 392,394 ----
  1249.           /* See if the local server wants it. */
  1250. +         STAToffered++;
  1251.           (void)sprintf(buff, "ihave %s", mesgid);
  1252. ***************
  1253. *** 435,436 ****
  1254. --- 447,449 ----
  1255.       }
  1256. +     STATsent++;
  1257.   
  1258. ***************
  1259. *** 452,453 ****
  1260. --- 465,467 ----
  1261.           (void)fprintf(stderr, "%s to \"%s\"\n", buff, mesgid);
  1262. +         STATrejected++;
  1263.       }
  1264. ***************
  1265. *** 461,462 ****
  1266. --- 475,477 ----
  1267.           (void)printf("%s\n", mesgid);
  1268. +         STATgot++;
  1269.       }
  1270. ***************
  1271. *** 473,474 ****
  1272. --- 488,506 ----
  1273.       SITEquit(Local);
  1274. +     /* Update timestamp file? */
  1275. +     if (Update) {
  1276. +     if ((F = fopen(Update, "w")) == NULL) {
  1277. +         (void)fprintf(stderr, "Can't update %s, %s\n",
  1278. +             Update, strerror(errno));
  1279. +         exit(1);
  1280. +     }
  1281. +     (void)fprintf(F, "got %ld offered %ld sent %ld rejected %ld\n",
  1282. +         STATgot, STAToffered, STATsent, STATrejected); 
  1283. +     if (ferror(F) || fclose(F) == EOF) {
  1284. +         (void)fprintf(stderr, "Can't update %s, %s\n",
  1285. +             Update, strerror(errno));
  1286. +         exit(1);
  1287. +     }
  1288. +     }
  1289.       exit(0);
  1290.  
  1291.  
  1292. Index: backends/overchan.c
  1293. ===================================================================
  1294. RCS file: backends/RCS/overchan.c,v
  1295. retrieving revision 1.2
  1296. diff -c1 -r1.2 backends/overchan.c
  1297. *** 1.2    1993/01/29 16:42:24
  1298. --- backends/overchan.c    1993/03/18 21:03:29
  1299. ***************
  1300. *** 1,2 ****
  1301. ! /*  $Revision: 1.2 $
  1302.   **
  1303. --- 1,2 ----
  1304. ! /*  $Revision: 1.3 $
  1305.   **
  1306. ***************
  1307. *** 18,19 ****
  1308. --- 18,71 ----
  1309.   
  1310. + STATIC BOOL    InSpoolDir;
  1311. + /*
  1312. + **  Try to make one directory.  Return FALSE on error.
  1313. + */
  1314. + STATIC BOOL
  1315. + MakeDir(Name)
  1316. +     char        *Name;
  1317. + {
  1318. +     struct stat        Sb;
  1319. +     if (mkdir(Name, GROUPDIR_MODE) >= 0)
  1320. +     return TRUE;
  1321. +     /* See if it failed because it already exists. */
  1322. +     return stat(Name, &Sb) >= 0 && S_ISDIR(Sb.st_mode);
  1323. + }
  1324. + /*
  1325. + **  Make overview directory if not in spool directory.  Return 0 if ok,
  1326. + **  else -1.
  1327. + */
  1328. + STATIC BOOL
  1329. + MakeOverDir(Name)
  1330. +     register char    *Name;
  1331. + {
  1332. +     register char    *p;
  1333. +     BOOL        made;
  1334. +     if (InSpoolDir)
  1335. +     return FALSE;
  1336. +     /* Optimize common case -- parent almost always exists. */
  1337. +     if (MakeDir(Name))
  1338. +     return TRUE;
  1339. +     /* Try to make each of comp and comp/foo in turn. */
  1340. +     for (p = Name; *p; p++)
  1341. +     if (*p == '/') {
  1342. +         *p = '\0';
  1343. +         made = MakeDir(Name);
  1344. +         *p = '/';
  1345. +         if (!made)
  1346. +         return FALSE;
  1347. +     }
  1348. +     return MakeDir(Name);
  1349. + }
  1350.   /*
  1351. ***************
  1352. *** 31,36 ****
  1353.       struct iovec    iov[4];
  1354. -     char        file[SPOOLNAMEBUFF];
  1355. -     char        lockfile[SPOOLNAMEBUFF];
  1356.       register int    fd;
  1357. -     register int    lockfd;
  1358.       register int    i;
  1359. --- 83,85 ----
  1360. ***************
  1361. *** 37,38 ****
  1362. --- 86,89 ----
  1363.       register BOOL    ok;
  1364. +     char        file[SPOOLNAMEBUFF];
  1365. +     struct stat        Sb;
  1366.   
  1367. ***************
  1368. *** 49,67 ****
  1369.   
  1370. !     /* Get the lock. */
  1371. !     (void)sprintf(lockfile, "%s/.LCK%s", Dir, _PATH_OVERVIEW);
  1372. !     if ((lockfd = open(lockfile, O_WRONLY | O_CREAT, ARTFILE_MODE)) < 0)
  1373. !     return FALSE;
  1374. !     (void)LockFile(lockfd, TRUE);
  1375. !     /* Open data file, write data. */
  1376.       (void)sprintf(file, "%s/%s", Dir, _PATH_OVERVIEW);
  1377. !     if ((fd = open(file, O_WRONLY | O_CREAT | O_APPEND, ARTFILE_MODE)) < 0) {
  1378. !     i = errno;
  1379. !     if (unlink(lockfile) < 0)
  1380. !         (void)fprintf(stderr, "overchan cant unlink %s %s\n",
  1381. !             lockfile, strerror(errno));
  1382. !     (void)close(lockfd);
  1383. !     errno = i;
  1384. !     return FALSE;
  1385.       }
  1386.       ok = TRUE;
  1387. --- 100,129 ----
  1388.   
  1389. !     /* Name the data file. */
  1390.       (void)sprintf(file, "%s/%s", Dir, _PATH_OVERVIEW);
  1391. !     /* Open and lock the file. */
  1392. !     for ( ; ; ) {
  1393. !     if ((fd = open(file, O_WRONLY | O_CREAT | O_APPEND, ARTFILE_MODE)) < 0) {
  1394. !         (void)fprintf(stderr, "overchan cant open %s, %s\n",
  1395. !             file, strerror(errno));
  1396. !         return FALSE;
  1397. !     }
  1398. !     if (LockFile(fd, FALSE) < 0)
  1399. !         /* Wait for it. */
  1400. !         (void)LockFile(fd, TRUE);
  1401. !     else {
  1402. !         /* Got the lock; make sure the file is still there. */
  1403. !         if (fstat(fd, &Sb) < 0) {
  1404. !         (void)fprintf(stderr, "overchan cant fstat %s, %s\n",
  1405. !             file, strerror(errno));
  1406. !         (void)close(fd);
  1407. !         return FALSE;
  1408. !         }
  1409. !         if (Sb.st_nlink > 0)
  1410. !         break;
  1411. !     }
  1412. !     /* Close file -- expireover might have removed it -- and try again. */
  1413. !     (void)close(fd);
  1414.       }
  1415.       ok = TRUE;
  1416. ***************
  1417. *** 79,86 ****
  1418.       }
  1419. -     if (unlink(lockfile) < 0) {
  1420. -     (void)fprintf(stderr, "overchan cant unlink %s %s\n",
  1421. -         lockfile, strerror(errno));
  1422. -     ok = FALSE;
  1423. -     }
  1424. -     (void)close(lockfd);
  1425.       return ok;
  1426. --- 141,142 ----
  1427. ***************
  1428. *** 132,134 ****
  1429.           /* Write data. */
  1430. !         if (!WriteData(Dir, Art, p))
  1431.           (void)fprintf(stderr, "overchan cant update %s %s\n",
  1432. --- 188,191 ----
  1433.           /* Write data. */
  1434. !         if (!WriteData(Dir, Art, p)
  1435. !          && (!MakeOverDir(Dir) || !WriteData(Dir, Art, p)))
  1436.           (void)fprintf(stderr, "overchan cant update %s %s\n",
  1437. ***************
  1438. *** 163,165 ****
  1439.           /* Write data. */
  1440. !         if (!WriteData(Dir, Art, Rest))
  1441.           (void)fprintf(stderr, "overchan cant update %s %s\n",
  1442. --- 220,223 ----
  1443.           /* Write data. */
  1444. !         if (!WriteData(Dir, Art, Rest)
  1445. !          && (!MakeOverDir(Dir) || !WriteData(Dir, Art, Rest)))
  1446.           (void)fprintf(stderr, "overchan cant update %s %s\n",
  1447. ***************
  1448. *** 185,188 ****
  1449.   main(ac, av)
  1450. !     int ac;
  1451. !     char *av[];
  1452.   {
  1453. --- 243,246 ----
  1454.   main(ac, av)
  1455. !     int            ac;
  1456. !     char        *av[];
  1457.   {
  1458. ***************
  1459. *** 193,196 ****
  1460.   
  1461. !     /* Parse JCL. */
  1462. !     (void)umask(0);
  1463.       Dir = _PATH_OVERVIEWDIR;
  1464. --- 251,253 ----
  1465.   
  1466. !     /* Set defaults. */
  1467.       Dir = _PATH_OVERVIEWDIR;
  1468. ***************
  1469. *** 197,198 ****
  1470. --- 254,258 ----
  1471.       INNinput = TRUE;
  1472. +     (void)umask(NEWSUMASK);
  1473. +     /* Parse JCL. */
  1474.       while ((i = getopt(ac, av, "cD:")) != EOF)
  1475. ***************
  1476. *** 211,212 ****
  1477. --- 271,273 ----
  1478.       av += optind;
  1479. +     InSpoolDir = EQ(Dir, _PATH_SPOOL);
  1480.   
  1481.  
  1482.  
  1483. Index: backends/shlock.c
  1484. ===================================================================
  1485. RCS file: backends/RCS/shlock.c,v
  1486. retrieving revision 1.5
  1487. diff -c1 -r1.5 backends/shlock.c
  1488. *** 1.5    1992/07/24 21:58:49
  1489. --- backends/shlock.c    1993/03/18 21:03:30
  1490. ***************
  1491. *** 1,2 ****
  1492. ! /*  $Revision: 1.5 $
  1493.   **
  1494. --- 1,2 ----
  1495. ! /*  $Revision: 1.6 $
  1496.   **
  1497. ***************
  1498. *** 112,113 ****
  1499. --- 112,114 ----
  1500.       JustChecking = FALSE;
  1501. +     (void)umask(NEWSUMASK);
  1502.   
  1503.  
  1504.  
  1505. Index: backends/shrinkfile.c
  1506. ===================================================================
  1507. RCS file: backends/RCS/shrinkfile.c,v
  1508. retrieving revision 1.3
  1509. diff -c1 -r1.3 backends/shrinkfile.c
  1510. *** 1.3    1993/01/29 16:42:25
  1511. --- backends/shrinkfile.c    1993/03/18 21:03:31
  1512. ***************
  1513. *** 1,2 ****
  1514. ! /*  $Revision: 1.3 $
  1515.   **  Shrink files on line boundaries.
  1516. --- 1,2 ----
  1517. ! /*  $Revision: 1.4 $
  1518.   **  Shrink files on line boundaries.
  1519. ***************
  1520. *** 307,310 ****
  1521.   
  1522. !     /* Parse JCL. */
  1523.       Verbose = FALSE;
  1524.       while ((i = getopt(ac, av, "s:v")) != EOF)
  1525. --- 307,313 ----
  1526.   
  1527. !     /* Set defaults. */
  1528.       Verbose = FALSE;
  1529. +     (void)umask(NEWSUMASK);
  1530. +     /* Parse JCL. */
  1531.       while ((i = getopt(ac, av, "s:v")) != EOF)
  1532.  
  1533.  
  1534. Index: config/Makefile
  1535. ===================================================================
  1536. RCS file: config/RCS/Makefile,v
  1537. retrieving revision 1.25
  1538. diff -c1 -r1.25 config/Makefile
  1539. *** 1.25    1993/01/29 16:42:25
  1540. --- config/Makefile    1993/03/18 21:03:31
  1541. ***************
  1542. *** 1,2 ****
  1543. ! ##  $Revision: 1.25 $
  1544.   SHELL    = /bin/sh
  1545. --- 1,2 ----
  1546. ! ##  $Revision: 1.26 $
  1547.   SHELL    = /bin/sh
  1548. ***************
  1549. *** 40,42 ****
  1550.       -@rm -f ../*/substtmp.new ../*/substtmp.old
  1551. !     @sh ./checkconf.sh $(CONF)
  1552.       ./subst $(SED) -f $(CONF) $(LIST)
  1553. --- 40,42 ----
  1554.       -@rm -f ../*/substtmp.new ../*/substtmp.old
  1555. !     @$(SHELL) ./checkconf.sh $(CONF)
  1556.       ./subst $(SED) -f $(CONF) $(LIST)
  1557.  
  1558.  
  1559. Index: config/config.dist
  1560. ===================================================================
  1561. RCS file: config/RCS/config.dist,v
  1562. retrieving revision 1.39
  1563. diff -c1 -r1.39 config/config.dist
  1564. *** 1.39    1993/01/29 16:42:26
  1565. --- config/config.dist    1993/03/18 21:03:33
  1566. ***************
  1567. *** 1,2 ****
  1568. ! ##  $Revision: 1.39 $
  1569.   ##
  1570. --- 1,2 ----
  1571. ! ##  $Revision: 1.40 $
  1572.   ##
  1573. ***************
  1574. *** 37,39 ****
  1575.   ##  If you use the standard NNTP way of connecting, where is the library?
  1576. - #NNTPLIB        /usr/local/lib/clientlib.o
  1577.   #### =()<NNTPLIB        @<NNTPLIB>@>()=
  1578. --- 37,38 ----
  1579. ***************
  1580. *** 73,74 ****
  1581. --- 72,76 ----
  1582.   RANLIB            ranlib
  1583. + ##  YACC (yet another config control?)
  1584. + #### =()<YACC            @<YACC>@>()=
  1585. + YACC            yacc
  1586.   ##  Ctags command.  Use echo if you don't have ctags.
  1587. ***************
  1588. *** 120,121 ****
  1589. --- 122,126 ----
  1590.   PATHMASTER        not-for-mail
  1591. + ##  Umask to set.
  1592. + #### =()<NEWSUMASK        @<NEWSUMASK>@>()=
  1593. + NEWSUMASK        02
  1594.   ##  Mode that incoming articles are created under.
  1595. ***************
  1596. *** 268,270 ****
  1597.   ##  What's the return type of exit?  Usually int or void.
  1598. ! ##  (For gcc use "volatile void" in EXITVAL and _EXITVAL.)
  1599.   #### =()<EXITVAL            @<EXITVAL>@>()=
  1600. --- 273,275 ----
  1601.   ##  What's the return type of exit?  Usually int or void.
  1602. ! ##  (For gcc (not pedantic ANSI) use "volatile void" in EXITVAL and _EXITVAL.)
  1603.   #### =()<EXITVAL            @<EXITVAL>@>()=
  1604. ***************
  1605. *** 494,496 ****
  1606.   _PATH_EGREP        /usr/local/bin/egnugrep
  1607. ! ##  Where awk lives (you might need the FSF one; see scanlogs)
  1608.   #### =()<_PATH_AWK        @<_PATH_AWK>@>()=
  1609. --- 499,501 ----
  1610.   _PATH_EGREP        /usr/local/bin/egnugrep
  1611. ! ##  Where awk lives
  1612.   #### =()<_PATH_AWK        @<_PATH_AWK>@>()=
  1613. ***************
  1614. *** 592,594 ****
  1615.   #### =()<_PATH_SHELLVARS        @<_PATH_SHELLVARS>@>()=
  1616. ! _PATH_SHELLVARS        /news/lib/innshellvars
  1617.   #### =()<_PATH_NEWSLIB        @<_PATH_NEWSLIB>@>()=
  1618. --- 597,601 ----
  1619.   #### =()<_PATH_SHELLVARS        @<_PATH_SHELLVARS>@>()=
  1620. ! _PATH_SHELLVARS        /usr/local/news/innshellvars
  1621. ! ##  Where most config and data files are usually stored; not required
  1622. ! ##  to the home directory of NEWSUSER.
  1623.   #### =()<_PATH_NEWSLIB        @<_PATH_NEWSLIB>@>()=
  1624.  
  1625.  
  1626. Index: doc/Makefile
  1627. ===================================================================
  1628. RCS file: doc/RCS/Makefile,v
  1629. retrieving revision 1.24
  1630. diff -c1 -r1.24 doc/Makefile
  1631. *** 1.24    1993/01/29 16:42:30
  1632. --- doc/Makefile    1993/03/18 21:03:33
  1633. ***************
  1634. *** 1,2 ****
  1635. ! ##  $Revision: 1.24 $
  1636.   SHELL    = /bin/sh
  1637. --- 1,2 ----
  1638. ! ##  $Revision: 1.25 $
  1639.   SHELL    = /bin/sh
  1640. ***************
  1641. *** 90,92 ****
  1642.   ##  Low-level install actions.
  1643. ! COPY    = sh ./putman.sh $(MANPAGESTYLE) "$(MANFLAGS)"
  1644.   $(MAN1)/convdate.1:    convdate.1    ; $(COPY) $? $@
  1645. --- 90,92 ----
  1646.   ##  Low-level install actions.
  1647. ! COPY    = $(SHELL) ./putman.sh $(MANPAGESTYLE) "$(MANFLAGS)"
  1648.   $(MAN1)/convdate.1:    convdate.1    ; $(COPY) $? $@
  1649.  
  1650.  
  1651. Index: doc/buffchan.8
  1652. ===================================================================
  1653. RCS file: doc/RCS/buffchan.8,v
  1654. retrieving revision 1.6
  1655. diff -c1 -r1.6 doc/buffchan.8
  1656. *** 1.6    1993/01/29 16:42:33
  1657. --- doc/buffchan.8    1993/03/18 21:03:34
  1658. ***************
  1659. *** 1,2 ****
  1660. ! .\" $Revision: 1.6 $
  1661.   .TH BUFFCHAN 8
  1662. --- 1,2 ----
  1663. ! .\" $Revision: 1.7 $
  1664.   .TH BUFFCHAN 8
  1665. ***************
  1666. *** 25,26 ****
  1667. --- 25,29 ----
  1668.   [
  1669. + .BI \-p " pidfile"
  1670. + ]
  1671. + [
  1672.   .BI \-l " lines"
  1673. ***************
  1674. *** 119,120 ****
  1675. --- 122,126 ----
  1676.   .PP
  1677. + If the ``\-p'' flag is used, the program will write a line containing
  1678. + its process ID (in text) to the specified file.
  1679. + .PP
  1680.   .I Buffchan
  1681. ***************
  1682. *** 171,173 ****
  1683.   ..
  1684. ! .R$ $Id: buffchan.8,v 1.6 1993/01/29 16:42:33 rsalz Exp $
  1685.   .SH "SEE ALSO"
  1686. --- 177,179 ----
  1687.   ..
  1688. ! .R$ $Id: buffchan.8,v 1.7 1993/03/18 21:03:33 rsalz Exp $
  1689.   .SH "SEE ALSO"
  1690.  
  1691.  
  1692. Index: doc/ctlinnd.8
  1693. ===================================================================
  1694. RCS file: doc/RCS/ctlinnd.8,v
  1695. retrieving revision 1.29
  1696. diff -c1 -r1.29 doc/ctlinnd.8
  1697. *** 1.29    1993/01/29 16:42:36
  1698. --- doc/ctlinnd.8    1993/03/18 21:03:35
  1699. ***************
  1700. *** 1,2 ****
  1701. ! .\" $Revision: 1.29 $
  1702.   .TH CTLINND 8
  1703. --- 1,2 ----
  1704. ! .\" $Revision: 1.30 $
  1705.   .TH CTLINND 8
  1706. ***************
  1707. *** 76,78 ****
  1708.   The angle brackets are optional.
  1709. - Any existing entry with the same Message-ID is replaced.
  1710.   .IR Arr ,
  1711. --- 76,77 ----
  1712. ***************
  1713. *** 83,85 ****
  1714.   when it was posted.
  1715. ! All three values are a number indicating the number ofseconds since the
  1716.   epoch.
  1717. --- 82,84 ----
  1718.   when it was posted.
  1719. ! All three values are a number indicating the number of seconds since the
  1720.   epoch.
  1721. ***************
  1722. *** 94,95 ****
  1723. --- 93,96 ----
  1724.   argument should be inside double quotes.
  1725. + If the server is paused or throttled, this command causes it to briefly
  1726. + open the history database.
  1727.   .TP
  1728. ***************
  1729. *** 117,119 ****
  1730.   The angle brackets are optional.
  1731. ! If the server paused or throttled, this command causes it to briefly
  1732.   open the history database.
  1733. --- 118,120 ----
  1734.   The angle brackets are optional.
  1735. ! If the server is paused or throttled, this command causes it to briefly
  1736.   open the history database.
  1737. ***************
  1738. *** 443,445 ****
  1739.   ..
  1740. ! .R$ $Id: ctlinnd.8,v 1.29 1993/01/29 16:42:36 rsalz Exp $
  1741.   .SH "SEE ALSO"
  1742. --- 444,446 ----
  1743.   ..
  1744. ! .R$ $Id: ctlinnd.8,v 1.30 1993/03/18 21:03:34 rsalz Exp $
  1745.   .SH "SEE ALSO"
  1746.  
  1747.  
  1748. Index: doc/expire.8
  1749. ===================================================================
  1750. RCS file: doc/RCS/expire.8,v
  1751. retrieving revision 1.14
  1752. diff -c1 -r1.14 doc/expire.8
  1753. *** 1.14    1993/01/29 16:42:40
  1754. --- doc/expire.8    1993/03/18 21:03:35
  1755. ***************
  1756. *** 1,2 ****
  1757. ! .\" $Revision: 1.14 $
  1758.   .TH EXPIRE 8
  1759. --- 1,2 ----
  1760. ! .\" $Revision: 1.15 $
  1761.   .TH EXPIRE 8
  1762. ***************
  1763. *** 13,14 ****
  1764. --- 13,17 ----
  1765.   [
  1766. + .BI \-g " file"
  1767. + ]
  1768. + [
  1769.   .BI \-h " file"
  1770. ***************
  1771. *** 184,185 ****
  1772. --- 187,192 ----
  1773.   for every line processed.
  1774. + If the ``\-g'' flag is given, then a one-line summary equivalent to the
  1775. + output of ``\-v1'' and preceeded by the current time, will be appended to
  1776. + the specified
  1777. + .IR file .
  1778.   .SH HISTORY
  1779. ***************
  1780. *** 189,191 ****
  1781.   ..
  1782. ! .R$ $Id: expire.8,v 1.14 1993/01/29 16:42:40 rsalz Exp $
  1783.   .SH "SEE ALSO"
  1784. --- 196,198 ----
  1785.   ..
  1786. ! .R$ $Id: expire.8,v 1.15 1993/03/18 21:03:35 rsalz Exp $
  1787.   .SH "SEE ALSO"
  1788.  
  1789.  
  1790. Index: doc/expireover.8
  1791. ===================================================================
  1792. RCS file: doc/RCS/expireover.8,v
  1793. retrieving revision 1.2
  1794. diff -c1 -r1.2 doc/expireover.8
  1795. *** 1.2    1993/01/29 16:42:43
  1796. --- doc/expireover.8    1993/03/18 21:03:36
  1797. ***************
  1798. *** 1,2 ****
  1799. ! .\" $Revision: 1.2 $
  1800.   .TH EXPIREOVER 8
  1801. --- 1,2 ----
  1802. ! .\" $Revision: 1.3 $
  1803.   .TH EXPIREOVER 8
  1804. ***************
  1805. *** 19,20 ****
  1806. --- 19,23 ----
  1807.   [
  1808. + .BI \-O " overview.fmt"
  1809. + ]
  1810. + [
  1811.   .B \-s
  1812. ***************
  1813. *** 76,77 ****
  1814. --- 79,83 ----
  1815.   .PP
  1816. + The ``\-O'' flag may be used to specify an alternate location for the
  1817. + .IR overview.fmt (5)
  1818. + file; this is normally only useful for debugging.
  1819.   .SH HISTORY
  1820. ***************
  1821. *** 84,89 ****
  1822.   ..
  1823. ! .R$ $Id: expireover.8,v 1.2 1993/01/29 16:42:43 rsalz Exp $
  1824.   .SH "SEE ALSO"
  1825. - newsoverview(5),
  1826.   expire(8),
  1827. ! newsoverview(8).
  1828. --- 90,94 ----
  1829.   ..
  1830. ! .R$ $Id: expireover.8,v 1.3 1993/03/18 21:03:36 rsalz Exp $
  1831.   .SH "SEE ALSO"
  1832.   expire(8),
  1833. ! overview.fmt(5).
  1834.  
  1835.  
  1836. Index: doc/filechan.8
  1837. ===================================================================
  1838. RCS file: doc/RCS/filechan.8,v
  1839. retrieving revision 1.13
  1840. diff -c1 -r1.13 doc/filechan.8
  1841. *** 1.13    1993/01/29 16:42:45
  1842. --- doc/filechan.8    1993/03/18 21:03:37
  1843. ***************
  1844. *** 1,2 ****
  1845. ! .\" $Revision: 1.13 $
  1846.   .TH FILECHAN 8
  1847. --- 1,2 ----
  1848. ! .\" $Revision: 1.14 $
  1849.   .TH FILECHAN 8
  1850. ***************
  1851. *** 15,16 ****
  1852. --- 15,19 ----
  1853.   ]
  1854. + [
  1855. + .BI \-p " pidfile"
  1856. + ]
  1857.   .SH DESCRIPTION
  1858. ***************
  1859. *** 53,54 ****
  1860. --- 56,60 ----
  1861.   .PP
  1862. + If the ``\-p'' flag is used, the program will write a line containing
  1863. + its process ID (in text) to the specified file.
  1864. + .PP
  1865.   If
  1866. ***************
  1867. *** 122,124 ****
  1868.   ..
  1869. ! .R$ $Id: filechan.8,v 1.13 1993/01/29 16:42:45 rsalz Exp $
  1870.   .SH "SEE ALSO"
  1871. --- 128,130 ----
  1872.   ..
  1873. ! .R$ $Id: filechan.8,v 1.14 1993/03/18 21:03:36 rsalz Exp $
  1874.   .SH "SEE ALSO"
  1875.  
  1876.  
  1877. Index: doc/hosts.nntp.5
  1878. ===================================================================
  1879. RCS file: doc/RCS/hosts.nntp.5,v
  1880. retrieving revision 1.16
  1881. diff -c1 -r1.16 doc/hosts.nntp.5
  1882. *** 1.16    1993/01/29 16:42:51
  1883. --- doc/hosts.nntp.5    1993/03/18 21:03:38
  1884. ***************
  1885. *** 1,2 ****
  1886. ! .\" $Revision: 1.16 $
  1887.   .TH HOSTS.NNTP 5
  1888. --- 1,2 ----
  1889. ! .\" $Revision: 1.17 $
  1890.   .TH HOSTS.NNTP 5
  1891. ***************
  1892. *** 3,5 ****
  1893.   .SH NAME
  1894. ! hosts.nntp \- list of hosts that feed NNTP news
  1895.   .SH DESCRIPTION
  1896. --- 3,5 ----
  1897.   .SH NAME
  1898. ! hosts.nntp, hosts.nntp.nolimit \- list of hosts that feed NNTP news
  1899.   .SH DESCRIPTION
  1900. ***************
  1901. *** 67,68 ****
  1902. --- 67,79 ----
  1903.   If the file contains passwords, it should not be world-readable.
  1904. + The file
  1905. + .\" =()<.IR @<_PATH_INNDHOSTS>@.nolimit ,>()=
  1906. + .IR /news/lib/hosts.nntp.nolimit ,
  1907. + if it exists is read whenever the ``hosts.nntp'' file is read.
  1908. + It has the same format, although only the first field is used.
  1909. + Any host mentioned in this file is not subject to the incoming connections
  1910. + limit specified by
  1911. + .IR innd 's
  1912. + \&``\-c'' flag.
  1913. + This can be used to allow local hosts or time-sensitive peers, to connect
  1914. + regardless of the local conditions.
  1915.   .SH HISTORY
  1916. ***************
  1917. *** 72,74 ****
  1918.   ..
  1919. ! .R$ $Id: hosts.nntp.5,v 1.16 1993/01/29 16:42:51 rsalz Exp $
  1920.   .SH "SEE ALSO"
  1921. --- 83,85 ----
  1922.   ..
  1923. ! .R$ $Id: hosts.nntp.5,v 1.17 1993/03/18 21:03:37 rsalz Exp $
  1924.   .SH "SEE ALSO"
  1925.  
  1926.  
  1927. Index: doc/inews.1
  1928. ===================================================================
  1929. RCS file: doc/RCS/inews.1,v
  1930. retrieving revision 1.24
  1931. diff -c1 -r1.24 doc/inews.1
  1932. *** 1.24    1993/01/29 16:42:51
  1933. --- doc/inews.1    1993/03/18 21:03:39
  1934. ***************
  1935. *** 1,2 ****
  1936. ! .\" $Revision: 1.24 $
  1937.   .TH INEWS 1
  1938. --- 1,2 ----
  1939. ! .\" $Revision: 1.25 $
  1940.   .TH INEWS 1
  1941. ***************
  1942. *** 95,102 ****
  1943.   rather then sent to the server.
  1944. - Since
  1945. - .I inews
  1946. - does not spool its input if the server is unavailable, programs such
  1947. - as mail/news gateways might want to use this flag and pipe the output
  1948. - into
  1949. - .IR rnews (1).
  1950.   .PP
  1951. --- 95,96 ----
  1952. ***************
  1953. *** 146,147 ****
  1954. --- 140,149 ----
  1955.   or with a non-zero status if the article could not be delivered.
  1956. + .PP
  1957. + Since
  1958. + .I inews
  1959. + will spool its input if the server is unavailable, it is usually necessary
  1960. + to run
  1961. + .IR rnews (1)
  1962. + with the ``\-U'' flag on a regular basis, usually out of
  1963. + .IR cron (8).
  1964.   .SH HISTORY
  1965. ***************
  1966. *** 151,153 ****
  1967.   ..
  1968. ! .R$ $Id: inews.1,v 1.24 1993/01/29 16:42:51 rsalz Exp $
  1969.   .SH "SEE ALSO"
  1970. --- 153,155 ----
  1971.   ..
  1972. ! .R$ $Id: inews.1,v 1.25 1993/03/18 21:03:38 rsalz Exp $
  1973.   .SH "SEE ALSO"
  1974.  
  1975.  
  1976. Index: doc/innd.8
  1977. ===================================================================
  1978. RCS file: doc/RCS/innd.8,v
  1979. retrieving revision 1.27
  1980. diff -c1 -r1.27 doc/innd.8
  1981. *** 1.27    1993/01/29 16:42:55
  1982. --- doc/innd.8    1993/03/18 21:03:40
  1983. ***************
  1984. *** 1,2 ****
  1985. ! .\" $Revision: 1.27 $
  1986.   .TH INND 8
  1987. --- 1,2 ----
  1988. ! .\" $Revision: 1.28 $
  1989.   .TH INND 8
  1990. ***************
  1991. *** 276,281 ****
  1992.   to all sites that subscribe to ``control'' or ``news.admin.''
  1993. ! Newgroup messages receive additional special treatment.
  1994. ! If the message is approved and posted to the name of the group being created,
  1995. ! then the message will be sent to all sites whose subscription patterns would
  1996. ! cause them to receive articles posted in that group.
  1997.   .\" =()<.if '@<MERGE_TO_GROUPS>@'DO' \{\>()=
  1998. --- 276,281 ----
  1999.   to all sites that subscribe to ``control'' or ``news.admin.''
  2000. ! Newgroup and rmgroup messages receive additional special treatment.
  2001. ! If the message is approved and posted to the name of the group being created
  2002. ! or removed, then the message will be sent to all sites whose subscription
  2003. ! patterns would cause them to receive articles posted in that group.
  2004.   .\" =()<.if '@<MERGE_TO_GROUPS>@'DO' \{\>()=
  2005. ***************
  2006. *** 465,467 ****
  2007.   ..
  2008. ! .R$ $Id: innd.8,v 1.27 1993/01/29 16:42:55 rsalz Exp $
  2009.   .SH "SEE ALSO"
  2010. --- 465,467 ----
  2011.   ..
  2012. ! .R$ $Id: innd.8,v 1.28 1993/03/18 21:03:39 rsalz Exp $
  2013.   .SH "SEE ALSO"
  2014.  
  2015.  
  2016. Index: doc/innxmit.8
  2017. ===================================================================
  2018. RCS file: doc/RCS/innxmit.8,v
  2019. retrieving revision 1.11
  2020. diff -c1 -r1.11 doc/innxmit.8
  2021. *** 1.11    1993/01/29 16:42:59
  2022. --- doc/innxmit.8    1993/03/18 21:03:41
  2023. ***************
  2024. *** 1,2 ****
  2025. ! .\" $Revision: 1.11 $
  2026.   .TH INNXMIT 8
  2027. --- 1,2 ----
  2028. ! .\" $Revision: 1.12 $
  2029.   .TH INNXMIT 8
  2030. ***************
  2031. *** 7,8 ****
  2032. --- 7,11 ----
  2033.   [
  2034. + .BI \-A " alt_spool"
  2035. + ]
  2036. + [
  2037.   .B \-a
  2038. ***************
  2039. *** 145,146 ****
  2040. --- 148,153 ----
  2041.   format, the article will be sent in ``quoted-printable'' form.
  2042. + .PP
  2043. + The ``\-A'' flag may be used to specify an alternate spool directory to
  2044. + use if the article is not found; this would normally be an NFS-mounted
  2045. + spool directory of a master server with longer expiration times.
  2046.   .SH HISTORY
  2047. ***************
  2048. *** 150,152 ****
  2049.   ..
  2050. ! .R$ $Id: innxmit.8,v 1.11 1993/01/29 16:42:59 rsalz Exp $
  2051.   .SH "SEE ALSO"
  2052. --- 157,159 ----
  2053.   ..
  2054. ! .R$ $Id: innxmit.8,v 1.12 1993/03/18 21:03:40 rsalz Exp $
  2055.   .SH "SEE ALSO"
  2056.  
  2057.  
  2058. Index: doc/news-recovery.8
  2059. ===================================================================
  2060. RCS file: doc/RCS/news-recovery.8,v
  2061. retrieving revision 1.13
  2062. diff -c1 -r1.13 doc/news-recovery.8
  2063. *** 1.13    1993/01/29 16:43:03
  2064. --- doc/news-recovery.8    1993/03/18 21:03:42
  2065. ***************
  2066. *** 1,2 ****
  2067. ! .\" $Revision: 1.13 $
  2068.   .TH NEWS-RECOVERY 8
  2069. --- 1,2 ----
  2070. ! .\" $Revision: 1.14 $
  2071.   .TH NEWS-RECOVERY 8
  2072. ***************
  2073. *** 348,350 ****
  2074.   The output is suitable for piping into
  2075. ! .IR filechan (1).
  2076.   .SH HISTORY
  2077. --- 348,350 ----
  2078.   The output is suitable for piping into
  2079. ! .IR filechan (8).
  2080.   .SH HISTORY
  2081. ***************
  2082. *** 354,356 ****
  2083.   ..
  2084. ! .R$ $Id: news-recovery.8,v 1.13 1993/01/29 16:43:03 rsalz Exp $
  2085.   .SH "SEE ALSO"
  2086. --- 354,356 ----
  2087.   ..
  2088. ! .R$ $Id: news-recovery.8,v 1.14 1993/03/18 21:03:41 rsalz Exp $
  2089.   .SH "SEE ALSO"
  2090. ***************
  2091. *** 359,362 ****
  2092.   dbz(3),
  2093. ! filechan(1),
  2094. ! find(1),
  2095.   history(5),
  2096. --- 359,361 ----
  2097.   dbz(3),
  2098. ! filechan(8),
  2099.   history(5),
  2100. ***************
  2101. *** 363,365 ****
  2102.   innd(8),
  2103. ! newsfeeds(5),
  2104. ! overview.fmt(5).
  2105. --- 362,363 ----
  2106.   innd(8),
  2107. ! newsfeeds(5).
  2108.  
  2109.  
  2110. Index: doc/news.daily.8
  2111. ===================================================================
  2112. RCS file: doc/RCS/news.daily.8,v
  2113. retrieving revision 1.5
  2114. diff -c1 -r1.5 doc/news.daily.8
  2115. *** 1.5    1993/01/29 16:43:05
  2116. --- doc/news.daily.8    1993/03/18 21:03:43
  2117. ***************
  2118. *** 11,13 ****
  2119.   [
  2120. ! .BI -t sleeptime
  2121.   ]
  2122. --- 11,13 ----
  2123.   [
  2124. ! .BI \-t " sleeptime"
  2125.   ]
  2126. ***************
  2127. *** 14,17 ****
  2128.   [
  2129. ! .BI -f controlfile
  2130.   ]
  2131.   
  2132. --- 14,20 ----
  2133.   [
  2134. ! .BI \-f " controlfile"
  2135.   ]
  2136. + [
  2137. + .BI \-l " logfile"
  2138. + ]
  2139.   
  2140. ***************
  2141. *** 183,190 ****
  2142.   It is sorted, and then fed into a pipeline responsible for doing
  2143. ! the removal, either
  2144. ! .IR sort / xarg / rm
  2145. ! pipeline or
  2146. ! .IR fastrm .
  2147. ! If all the files were removed, the input file is removed.
  2148. ! If not, then mail is sent to the news administrator.
  2149.   .PP
  2150. --- 186,197 ----
  2151.   It is sorted, and then fed into a pipeline responsible for doing
  2152. ! the removal, normally
  2153. ! .IR fastrm (8).
  2154. ! If there seemed to be a problem removing the files, then mail is sent to
  2155. ! the news administrator.
  2156. ! If there were no problems, then
  2157. ! .I file
  2158. ! is renamed to
  2159. ! .\" =()<.I @<_PATH_MOST_LOGS>@/expire.list>()=
  2160. ! .I /var/log/news/expire.list
  2161. ! where it is kept (for safety) until the next day's expiration.
  2162.   .PP
  2163. ***************
  2164. *** 200,202 ****
  2165.   When the condition restores, it unblocks the server.
  2166. ! This script requires a local configuration file in order to run.
  2167.   .PP
  2168. --- 207,220 ----
  2169.   When the condition restores, it unblocks the server.
  2170. ! In addition, on each pass through the loop it will check the specified
  2171. ! .I logfile
  2172. ! to see if it has been modified, and send mail to the news administrator
  2173. ! if so.
  2174. ! It is usually a good idea to set this to the
  2175. ! .IR syslog (3)
  2176. ! file that receives critical news messages.
  2177. ! Upon receipt of an interrupt signal,
  2178. ! .IR innwatch
  2179. ! will report its status in the file
  2180. ! .\" =()<.IR @<_PATH_INNWSTATUS>@ .>()=
  2181. ! .IR /news/lib/innwatch.status .
  2182.   .PP
  2183. ***************
  2184. *** 237,239 ****
  2185.   ..
  2186. ! .R$ $Id: news.daily.8,v 1.5 1993/01/29 16:43:05 rsalz Exp $
  2187.   .SH "SEE ALSO"
  2188. --- 255,257 ----
  2189.   ..
  2190. ! .R$ $Id: news.daily.8,v 1.6 1993/03/18 21:03:42 rsalz Exp $
  2191.   .SH "SEE ALSO"
  2192. ***************
  2193. *** 242,243 ****
  2194. --- 260,262 ----
  2195.   expire(8),
  2196. + fastrm(8),
  2197.   newslog(5),
  2198.  
  2199.  
  2200. Index: doc/newsfeeds.5
  2201. ===================================================================
  2202. RCS file: doc/RCS/newsfeeds.5,v
  2203. retrieving revision 1.26
  2204. diff -c1 -r1.26 doc/newsfeeds.5
  2205. *** 1.26    1993/01/29 16:43:06
  2206. --- doc/newsfeeds.5    1993/03/18 21:03:44
  2207. ***************
  2208. *** 1,2 ****
  2209. ! .\" $Revision: 1.26 $
  2210.   .TH NEWSFEEDS 5
  2211. --- 1,2 ----
  2212. ! .\" $Revision: 1.27 $
  2213.   .TH NEWSFEEDS 5
  2214. ***************
  2215. *** 89,93 ****
  2216.   .RE
  2217. ! Note, again, that the result of the last match is the most important.
  2218. ! Also, ``comp.sources.*'' could be written as ``comp.sources*'' but this
  2219. ! would not have the same effect if there were a ``comp.sources-only'' group.
  2220.   .PP
  2221. --- 89,96 ----
  2222.   .RE
  2223. ! There are three things to note about this example.
  2224. ! The first is that the trailing ``.*'' is required.
  2225. ! The second is that, again, the result of the last match is the most important.
  2226. ! The third is that ``comp.sources.*'' could be written as ``comp.sources*''
  2227. ! but this would not have the same effect if there were a
  2228. ! ``comp.sources-only'' group.
  2229.   .PP
  2230. ***************
  2231. *** 99,102 ****
  2232.   the site should or should not receive.
  2233. ! The default is to send all distributions, but if an article has a
  2234. ! Distribution header and any
  2235.   .IR distrib s
  2236. --- 102,106 ----
  2237.   the site should or should not receive.
  2238. ! The default is to send all articles to all sites that subscribe to any of
  2239. ! the groups where it has been posted , but if an article has a Distribution
  2240. ! header and any
  2241.   .IR distrib s
  2242. ***************
  2243. *** 148,149 ****
  2244. --- 152,154 ----
  2245.       d    Distribution header required
  2246. +     p    Do not check Path header before propagating
  2247.   .fi
  2248. ***************
  2249. *** 284,286 ****
  2250.   The ``O'' generates input to the
  2251. ! .IR overviewchan (8)
  2252.   program.
  2253. --- 289,291 ----
  2254.   The ``O'' generates input to the
  2255. ! .IR overchan (8)
  2256.   program.
  2257. ***************
  2258. *** 350,352 ****
  2259.   .PP
  2260. ! A site fed by a file is the msot common type of feed.
  2261.   When the site should receive an article, one line is written to the file
  2262. --- 355,357 ----
  2263.   .PP
  2264. ! A site fed by a file is simplest type of feed.
  2265.   When the site should receive an article, one line is written to the file
  2266. ***************
  2267. *** 540,542 ****
  2268.   ..
  2269. ! .R$ $Id: newsfeeds.5,v 1.26 1993/01/29 16:43:06 rsalz Exp $
  2270.   .SH "SEE ALSO"
  2271. --- 545,547 ----
  2272.   ..
  2273. ! .R$ $Id: newsfeeds.5,v 1.27 1993/03/18 21:03:43 rsalz Exp $
  2274.   .SH "SEE ALSO"
  2275.  
  2276.  
  2277. Index: doc/nnrpd.8
  2278. ===================================================================
  2279. RCS file: doc/RCS/nnrpd.8,v
  2280. retrieving revision 1.11
  2281. diff -c1 -r1.11 doc/nnrpd.8
  2282. *** 1.11    1993/01/29 16:43:08
  2283. --- doc/nnrpd.8    1993/03/18 21:03:45
  2284. ***************
  2285. *** 1,2 ****
  2286. ! .\" $Revision: 1.11 $
  2287.   .TH NNRPD 8
  2288. --- 1,2 ----
  2289. ! .\" $Revision: 1.12 $
  2290.   .TH NNRPD 8
  2291. ***************
  2292. *** 184,185 ****
  2293. --- 184,191 ----
  2294.   .IR innd (8).
  2295. + .IP 10.
  2296. + The
  2297. + .I "``date''"
  2298. + command is provided; this is based on the draft NNTP protocol revision.
  2299. + It returns a one-line response code of 111 followed by the GMT date
  2300. + and time on the server in the form YYYYMMDDhhmmss.
  2301.   .SH HISTORY
  2302. ***************
  2303. *** 191,193 ****
  2304.   ..
  2305. ! .R$ $Id: nnrpd.8,v 1.11 1993/01/29 16:43:08 rsalz Exp $
  2306.   .SH "SEE ALSO"
  2307. --- 197,199 ----
  2308.   ..
  2309. ! .R$ $Id: nnrpd.8,v 1.12 1993/03/18 21:03:44 rsalz Exp $
  2310.   .SH "SEE ALSO"
  2311.  
  2312.  
  2313. Index: doc/nntpget.1
  2314. ===================================================================
  2315. RCS file: doc/RCS/nntpget.1,v
  2316. retrieving revision 1.7
  2317. diff -c1 -r1.7 doc/nntpget.1
  2318. *** 1.7    1993/01/29 16:43:08
  2319. --- doc/nntpget.1    1993/03/18 21:03:45
  2320. ***************
  2321. *** 1,2 ****
  2322. ! .\" $Revision: 1.7 $
  2323.   .TH NNTPGET 1
  2324. --- 1,2 ----
  2325. ! .\" $Revision: 1.8 $
  2326.   .TH NNTPGET 1
  2327. ***************
  2328. *** 22,23 ****
  2329. --- 22,26 ----
  2330.   [
  2331. + .BI \-u " file"
  2332. + ]
  2333. + [
  2334.   .B \-v
  2335. ***************
  2336. *** 38,40 ****
  2337.   .I nntpget
  2338. ! connects to the specified remove
  2339.   .I host
  2340. --- 41,43 ----
  2341.   .I nntpget
  2342. ! connects to the specified remote
  2343.   .I host
  2344. ***************
  2345. *** 52,53 ****
  2346. --- 55,59 ----
  2347.   .IR file .
  2348. + The ``\-u'' flag is the same except that if the transfer succeeded, the
  2349. + file will be updated with a statistics line, modifying its timestamp so that
  2350. + it can be used in later invocations.
  2351.   If the ``\-t'' flag is used, then the specified
  2352. ***************
  2353. *** 67,69 ****
  2354.   ..
  2355. ! .R$ $Id: nntpget.1,v 1.7 1993/01/29 16:43:08 rsalz Exp $
  2356.   .SH "SEE ALSO"
  2357. --- 73,75 ----
  2358.   ..
  2359. ! .R$ $Id: nntpget.1,v 1.8 1993/03/18 21:03:45 rsalz Exp $
  2360.   .SH "SEE ALSO"
  2361.  
  2362.  
  2363. Index: doc/overchan.8
  2364. ===================================================================
  2365. RCS file: doc/RCS/overchan.8,v
  2366. retrieving revision 1.2
  2367. diff -c1 -r1.2 doc/overchan.8
  2368. *** 1.2    1993/01/29 16:43:10
  2369. --- doc/overchan.8    1993/03/18 21:03:46
  2370. ***************
  2371. *** 1,2 ****
  2372. ! .\" $Revision: 1.2 $
  2373.   .TH OVERCHAN 8
  2374. --- 1,2 ----
  2375. ! .\" $Revision: 1.3 $
  2376.   .TH OVERCHAN 8
  2377. ***************
  2378. *** 20,22 ****
  2379.   or standard input if none are specified.
  2380. ! (A single dash means in the file list means to read standard input.)
  2381.   It uses this information to update the news overview database.
  2382. --- 20,22 ----
  2383.   or standard input if none are specified.
  2384. ! (A single dash in the file list means to read standard input.)
  2385.   It uses this information to update the news overview database.
  2386. ***************
  2387. *** 41,45 ****
  2388.   .IR newsfeeds (5)
  2389. ! file.
  2390. ! This data consists of a lien of text, separated into two parts by a tab.
  2391. ! The part is a list of all relative pathnames where the article has
  2392.   been written, with a single space between entries.
  2393. --- 41,49 ----
  2394.   .IR newsfeeds (5)
  2395. ! file, for example:
  2396. ! .RS
  2397. ! .\" =()<overview:*:Tc,WO:@<_PATH_NEWSBIN>@/overchan>()=
  2398. ! overview:*:Tc,WO:/news/bin/overchan
  2399. ! .RE
  2400. ! This data consists of a line of text, separated into two parts by a tab.
  2401. ! The first part is a list of all relative pathnames where the article has
  2402.   been written, with a single space between entries.
  2403. ***************
  2404. *** 63,65 ****
  2405.   ..
  2406. ! .R$ $Id: overchan.8,v 1.2 1993/01/29 16:43:10 rsalz Exp $
  2407.   .SH "SEE ALSO"
  2408. --- 67,69 ----
  2409.   ..
  2410. ! .R$ $Id: overchan.8,v 1.3 1993/03/18 21:03:46 rsalz Exp $
  2411.   .SH "SEE ALSO"
  2412.  
  2413.  
  2414. Index: doc/overview.fmt.5
  2415. ===================================================================
  2416. RCS file: doc/RCS/overview.fmt.5,v
  2417. retrieving revision 1.2
  2418. diff -c1 -r1.2 doc/overview.fmt.5
  2419. *** 1.2    1993/01/29 16:43:11
  2420. --- doc/overview.fmt.5    1993/03/18 21:03:47
  2421. ***************
  2422. *** 1,2 ****
  2423. ! .\" $Revision: 1.2 $
  2424.   .TH OVERVIEW.FMT 5
  2425. --- 1,2 ----
  2426. ! .\" $Revision: 1.3 $
  2427.   .TH OVERVIEW.FMT 5
  2428. ***************
  2429. *** 20,24 ****
  2430.   existing overview database using
  2431. ! .IR makeoverview ;
  2432. ! see
  2433. ! .IR news-recovery (8).
  2434.   .PP
  2435. --- 20,23 ----
  2436.   existing overview database using
  2437. ! .IR expireover (8)
  2438. ! after removing all existing overview files.
  2439.   .PP
  2440. ***************
  2441. *** 45,46 ****
  2442.   ..
  2443. ! .R$ $Id: overview.fmt.5,v 1.2 1993/01/29 16:43:11 rsalz Exp $
  2444. --- 44,45 ----
  2445.   ..
  2446. ! .R$ $Id: overview.fmt.5,v 1.3 1993/03/18 21:03:47 rsalz Exp $
  2447.  
  2448.  
  2449. Index: expire/Makefile
  2450. ===================================================================
  2451. RCS file: expire/RCS/Makefile,v
  2452. retrieving revision 1.13
  2453. diff -c1 -r1.13 expire/Makefile
  2454. *** 1.13    1993/01/29 16:43:16
  2455. --- expire/Makefile    1993/03/18 21:03:48
  2456. ***************
  2457. *** 1,2 ****
  2458. ! ##  $Revision: 1.13 $
  2459.   SHELL    = /bin/sh
  2460. --- 1,2 ----
  2461. ! ##  $Revision: 1.14 $
  2462.   SHELL    = /bin/sh
  2463. ***************
  2464. *** 122,140 ****
  2465.   $(NEWSBIN)/convdate:        convdate
  2466. !     sh ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  2467.   $(NEWSBIN)/expire:        expire
  2468. !     sh ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  2469.   $(NEWSBIN)/expireover:        expireover
  2470. !     sh ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  2471.   $(NEWSBIN)/fastrm:        fastrm
  2472. !     sh ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  2473.   $(NEWSBIN)/grephistory:        grephistory
  2474. !     sh ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  2475.   $(NEWSBIN)/makeactive:        makeactive
  2476. !     sh ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  2477.   $(NEWSBIN)/makehistory:        makehistory
  2478. !     sh ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  2479.   $(NEWSBIN)/newsrequeue:        newsrequeue
  2480. !     sh ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  2481.   $(NEWSBIN)/prunehistory:    prunehistory
  2482. !     sh ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  2483.   
  2484. --- 122,140 ----
  2485.   $(NEWSBIN)/convdate:        convdate
  2486. !     $(SHELL) ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  2487.   $(NEWSBIN)/expire:        expire
  2488. !     $(SHELL) ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  2489.   $(NEWSBIN)/expireover:        expireover
  2490. !     $(SHELL) ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  2491.   $(NEWSBIN)/fastrm:        fastrm
  2492. !     $(SHELL) ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  2493.   $(NEWSBIN)/grephistory:        grephistory
  2494. !     $(SHELL) ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  2495.   $(NEWSBIN)/makeactive:        makeactive
  2496. !     $(SHELL) ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  2497.   $(NEWSBIN)/makehistory:        makehistory
  2498. !     $(SHELL) ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  2499.   $(NEWSBIN)/newsrequeue:        newsrequeue
  2500. !     $(SHELL) ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  2501.   $(NEWSBIN)/prunehistory:    prunehistory
  2502. !     $(SHELL) ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  2503.   
  2504.  
  2505.  
  2506. Index: expire/expire.c
  2507. ===================================================================
  2508. RCS file: expire/RCS/expire.c,v
  2509. retrieving revision 1.16
  2510. diff -c1 -r1.16 expire/expire.c
  2511. *** 1.16    1993/01/29 16:43:19
  2512. --- expire/expire.c    1993/03/18 21:03:50
  2513. ***************
  2514. *** 1,2 ****
  2515. ! /*  $Revision: 1.16 $
  2516.   **
  2517. --- 1,2 ----
  2518. ! /*  $Revision: 1.17 $
  2519.   **
  2520. ***************
  2521. *** 86,87 ****
  2522. --- 86,88 ----
  2523.   /* Statistics; for -v flag. */
  2524. + STATIC char        *EXPgraph;
  2525.   STATIC int        EXPverbose;
  2526. ***************
  2527. *** 804,805 ****
  2528. --- 805,808 ----
  2529.   {
  2530. +     FILE    *F;
  2531.       if (Server)
  2532. ***************
  2533. *** 831,832 ****
  2534. --- 834,844 ----
  2535.   
  2536. +     /* Append statistics to a summary file */
  2537. +     if (EXPgraph) {
  2538. +     F = EXPfopen(FALSE, EXPgraph, "a");
  2539. +     (void)fprintf(F, "%ld %ld %ld %ld %ld %ld %ld\n",
  2540. +         (long)Now, EXPprocessed, EXPstillhere, EXPallgone,
  2541. +         EXPunlinked, EXPhistdrop, EXPhistremember);
  2542. +     (void)fclose(F);
  2543. +     }
  2544.       exit(x);
  2545. ***************
  2546. *** 887,888 ****
  2547. --- 899,901 ----
  2548.       UnlinkFile = FALSE;
  2549. +     (void)umask(NEWSUMASK);
  2550.   
  2551. ***************
  2552. *** 889,891 ****
  2553.       /* Parse JCL. */
  2554. !     while ((i = getopt(ac, av, "f:h:d:ilnpqr:stv:w:xz:")) != EOF)
  2555.       switch (i) {
  2556. --- 902,904 ----
  2557.       /* Parse JCL. */
  2558. !     while ((i = getopt(ac, av, "f:h:d:g:ilnpqr:stv:w:xz:")) != EOF)
  2559.       switch (i) {
  2560. ***************
  2561. *** 899,900 ****
  2562. --- 912,916 ----
  2563.           History = optarg;
  2564. +         break;
  2565. +     case 'g':
  2566. +         EXPgraph = optarg;
  2567.           break;
  2568.  
  2569.  
  2570. Index: expire/expireover.c
  2571. ===================================================================
  2572. RCS file: expire/RCS/expireover.c,v
  2573. retrieving revision 1.2
  2574. diff -c1 -r1.2 expire/expireover.c
  2575. *** 1.2    1993/01/29 16:43:21
  2576. --- expire/expireover.c    1993/03/18 21:03:51
  2577. ***************
  2578. *** 1,2 ****
  2579. ! /*  $Revision: 1.2 $
  2580.   **
  2581. --- 1,2 ----
  2582. ! /*  $Revision: 1.3 $
  2583.   **
  2584. ***************
  2585. *** 6,7 ****
  2586. --- 6,8 ----
  2587.   #include <stdio.h>
  2588. + #include <ctype.h>
  2589.   #include <sys/types.h>
  2590. ***************
  2591. *** 80,81 ****
  2592. --- 81,83 ----
  2593.   STATIC char        SPOOL[] = _PATH_SPOOL;
  2594. + STATIC char        *SCHEMA = _PATH_SCHEMA;
  2595.   STATIC BOOL        InSpoolDir;
  2596. ***************
  2597. *** 114,120 ****
  2598.   
  2599. !     if (lp->Used > 1) {
  2600. !     for (ap = lp->Articles, i = lp->Used - 1; --i >= 0; ap++)
  2601. !         if (ap[0] >= ap[1])
  2602. !         break;
  2603. !     if (i < 0)
  2604.           qsort((POINTER)lp->Articles, (SIZE_T)lp->Used,
  2605. --- 116,119 ----
  2606.   
  2607. !     for (ap = lp->Articles, i = lp->Used - 1; --i >= 0; ap++)
  2608. !     if (ap[0] >= ap[1]) {
  2609.           qsort((POINTER)lp->Articles, (SIZE_T)lp->Used,
  2610. ***************
  2611. *** 121,123 ****
  2612.           sizeof lp->Articles[0], LISTcompare);
  2613. !     }
  2614.   }
  2615. --- 120,123 ----
  2616.           sizeof lp->Articles[0], LISTcompare);
  2617. !         break;
  2618. !     }
  2619.   }
  2620. ***************
  2621. *** 203,213 ****
  2622.       }
  2623. -     (void)LockFile(lfd, TRUE);
  2624.   
  2625. !     /* Open file, get it's size. */
  2626.       (void)sprintf(file, "%s/%s", group, _PATH_OVERVIEW);
  2627. !     if ((fd = open(file, O_RDONLY)) < 0) {
  2628. !     (void)fprintf(stderr, "Can't open %s, %s\n", file, strerror(errno));
  2629. !     UnlockGroup(lfd, lockfile);
  2630. !     return;
  2631.       }
  2632.       if (fstat(fd, &Sb) < 0) {
  2633. --- 203,220 ----
  2634.       }
  2635.   
  2636. !     /* Open file, lock it. */
  2637.       (void)sprintf(file, "%s/%s", group, _PATH_OVERVIEW);
  2638. !     for ( ; ; ) {
  2639. !     if ((fd = open(file, O_RDWR)) < 0) {
  2640. !         (void)fprintf(stderr, "Can't open %s, %s\n", file, strerror(errno));
  2641. !         UnlockGroup(lfd, lockfile);
  2642. !         return;
  2643. !     }
  2644. !     if (LockFile(fd, FALSE) >= 0)
  2645. !         break;
  2646. !     /* Wait for lock; close file -- might be unlinked -- and try again. */
  2647. !     (void)LockFile(fd, TRUE);
  2648. !     (void)close(fd);
  2649.       }
  2650.       if (fstat(fd, &Sb) < 0) {
  2651. ***************
  2652. *** 214,217 ****
  2653.       (void)fprintf(stderr, "Can't open %s, %s\n", file, strerror(errno));
  2654. -     (void)close(fd);
  2655.       UnlockGroup(lfd, lockfile);
  2656.       return;
  2657. --- 221,224 ----
  2658.       (void)fprintf(stderr, "Can't open %s, %s\n", file, strerror(errno));
  2659.       UnlockGroup(lfd, lockfile);
  2660. +     (void)close(fd);
  2661.       return;
  2662. ***************
  2663. *** 220,223 ****
  2664.       /* Empty file; done deleting. */
  2665. -     (void)close(fd);
  2666.       UnlockGroup(lfd, lockfile);
  2667.       return;
  2668. --- 227,230 ----
  2669.       /* Empty file; done deleting. */
  2670.       UnlockGroup(lfd, lockfile);
  2671. +     (void)close(fd);
  2672.       return;
  2673. ***************
  2674. *** 236,239 ****
  2675.       (void)fprintf(stderr, "Can't read %s, %s\n", file, strerror(errno));
  2676. -     (void)close(fd);
  2677.       UnlockGroup(lfd, lockfile);
  2678.       return;
  2679. --- 243,246 ----
  2680.       (void)fprintf(stderr, "Can't read %s, %s\n", file, strerror(errno));
  2681.       UnlockGroup(lfd, lockfile);
  2682. +     (void)close(fd);
  2683.       return;
  2684. ***************
  2685. *** 241,243 ****
  2686.       B.Data[Sb.st_size] = '\0';
  2687. -     (void)close(fd);
  2688.   
  2689. --- 248,249 ----
  2690. ***************
  2691. *** 308,309 ****
  2692. --- 314,316 ----
  2693.               UnlockGroup(lfd, lockfile);
  2694. +             (void)close(fd);
  2695.               return;
  2696. ***************
  2697. *** 326,327 ****
  2698. --- 333,335 ----
  2699.       UnlockGroup(lfd, lockfile);
  2700. +     (void)close(fd);
  2701.       return;
  2702. ***************
  2703. *** 332,334 ****
  2704.           lockfile, strerror(errno));
  2705. !     UnlockGroup(lfd, lockfile);
  2706.   }
  2707. --- 340,349 ----
  2708.           lockfile, strerror(errno));
  2709. !     /* Don't call UnlockGroup; do it inline. */
  2710. !     if (close(lfd) < 0)
  2711. !     (void)fprintf(stderr, "expireover cant close %s %s\n",
  2712. !         file, strerror(errno));
  2713. !     if (close(fd) < 0)
  2714. !     (void)fprintf(stderr, "expireover cant close unlinked %s %s\n",
  2715. !         file, strerror(errno));
  2716.   }
  2717. ***************
  2718. *** 342,344 ****
  2719.   {
  2720. -     static char            SCHEMA[] = _PATH_SCHEMA;
  2721.       register FILE        *F;
  2722. --- 357,358 ----
  2723. ***************
  2724. *** 401,402 ****
  2725. --- 415,417 ----
  2726.       register int        size;
  2727. +     register int        ov_size;
  2728.       register long        lines;
  2729. ***************
  2730. *** 463,465 ****
  2731.           (void)strcpy(hp->Header, p);
  2732. -         hp->HasHeader = TRUE;
  2733.           for (p = hp->Header; *p; p++)
  2734. --- 478,479 ----
  2735. ***************
  2736. *** 467,468 ****
  2737. --- 481,483 ----
  2738.               *p = ' ';
  2739. +         hp->HasHeader = TRUE;
  2740.       }
  2741. ***************
  2742. *** 483,485 ****
  2743.       /* Calculate total size, fix hardwired headers. */
  2744. !     size = strlen(name) + ARTfieldsize + 2;
  2745.       for (hp = Headers, fp = ARTfields, i = ARTfieldsize; --i >= 0; hp++, fp++) {
  2746. --- 498,500 ----
  2747.       /* Calculate total size, fix hardwired headers. */
  2748. !     ov_size = strlen(name) + ARTfieldsize + 2;
  2749.       for (hp = Headers, fp = ARTfields, i = ARTfieldsize; --i >= 0; hp++, fp++) {
  2750. ***************
  2751. *** 490,499 ****
  2752.           t = lines;
  2753.           (void)sprintf(value, "%ld", t);
  2754. !         if (hp->HasHeader)
  2755. !         DISPOSE(hp->Header);
  2756. !         hp->Header = COPY(value);
  2757.           hp->HasHeader = TRUE;
  2758. !     }
  2759. !     if (hp->HasHeader)
  2760. !         size += strlen(hp->Header);
  2761.       }
  2762. --- 505,522 ----
  2763.           t = lines;
  2764.           (void)sprintf(value, "%ld", t);
  2765. !         size = strlen(value);
  2766. !         if (hp->Length == 0) {
  2767. !          hp->Length = size;
  2768. !         hp->Header = NEW(char, hp->Length + 1);
  2769. !         }
  2770. !         else if (hp->Length < size) {
  2771. !         hp->Length = size;
  2772. !         RENEW(hp->Header, char, hp->Length + 1);
  2773. !         }
  2774. !         (void)strcpy(hp->Header, value);
  2775.           hp->HasHeader = TRUE;
  2776. !        }
  2777. !        if (hp->HasHeader)
  2778. !        ov_size += strlen(hp->Header);
  2779.       }
  2780. ***************
  2781. *** 502,504 ****
  2782.       if (B.Size == 0) {
  2783. !     B.Size = size;
  2784.       B.Data = NEW(char, B.Size + 1);
  2785. --- 525,527 ----
  2786.       if (B.Size == 0) {
  2787. !     B.Size = ov_size;
  2788.       B.Data = NEW(char, B.Size + 1);
  2789. ***************
  2790. *** 505,508 ****
  2791.       }
  2792. !     else if (B.Size < size) {
  2793. !     B.Size = size;
  2794.       RENEW(B.Data, char, B.Size + 1);
  2795. --- 528,531 ----
  2796.       }
  2797. !     else if (B.Size < ov_size) {
  2798. !     B.Size = ov_size;
  2799.       RENEW(B.Data, char, B.Size + 1);
  2800. ***************
  2801. *** 517,518 ****
  2802. --- 540,542 ----
  2803.       }
  2804. +     *p = '\0';
  2805.   
  2806. ***************
  2807. *** 606,615 ****
  2808.       }
  2809. -     (void)LockFile(lfd, TRUE);
  2810.   
  2811. !     /* Open file, read it in. */
  2812.       (void)sprintf(file, "%s/%s", group, _PATH_OVERVIEW);
  2813. !     if ((fd = open(file, O_RDONLY)) >= 0) {
  2814. !     if (fstat(fd, &Sb) < 0) {
  2815.           (void)fprintf(stderr, "Can't open %s, %s\n", file, strerror(errno));
  2816. -         (void)close(fd);
  2817.           UnlockGroup(lfd, lockfile);
  2818. --- 630,637 ----
  2819.       }
  2820.   
  2821. !     /* Open file, lock it. */
  2822.       (void)sprintf(file, "%s/%s", group, _PATH_OVERVIEW);
  2823. !     for ( ; ; ) {
  2824. !     if ((fd = open(file, O_RDWR | O_CREAT, ARTFILE_MODE)) < 0) {
  2825.           (void)fprintf(stderr, "Can't open %s, %s\n", file, strerror(errno));
  2826.           UnlockGroup(lfd, lockfile);
  2827. ***************
  2828. *** 617,658 ****
  2829.       }
  2830. !     if (Sb.st_size != 0) {
  2831. !         /* Read in the whole file. */
  2832. !         if (B.Size == 0) {
  2833. !         B.Size = Sb.st_size + 1;
  2834. !         B.Data = NEW(char, B.Size);
  2835. !         }
  2836. !         else if (B.Size < Sb.st_size) {
  2837. !         B.Size = Sb.st_size + 1;
  2838. !         RENEW(B.Data, char, B.Size);
  2839. !         }
  2840. !         if (xread(fd, B.Data, Sb.st_size) < 0) {
  2841. !         (void)fprintf(stderr, "Can't read %s, %s\n",
  2842. !             file, strerror(errno));
  2843. !         (void)close(fd);
  2844. !         UnlockGroup(lfd, lockfile);
  2845. !         return;
  2846. !         }
  2847. !         B.Data[Sb.st_size] = '\0';
  2848. !         (void)close(fd);
  2849.   
  2850. !         /* Count lines, get space. */
  2851. !         for (i = 1, p = B.Data; (p = strchr(p, '\n')) != NULL && *++p; i++)
  2852. !         continue;
  2853. !         if (LineSize < i + 1 + LineUsed) {
  2854. !         LineSize = i + 1 + LineUsed;
  2855. !         RENEW(Lines, LINE, LineSize);
  2856. !         }
  2857.   
  2858. !         /* Add to lines array. */
  2859. !         for (lp = Lines + LineUsed, p = B.Data; ; p = next, lp++) {
  2860. !         if ((next = strchr(p, '\n')) == NULL)
  2861. !             break;
  2862. !         lp->Start = p;
  2863. !         lp->Length = ++next - p;
  2864. !         lp->Article = atol(p);
  2865. !         }
  2866. !         qsort((POINTER)Lines, (SIZE_T)(lp - Lines), sizeof lp[0],
  2867. !         LINEcompare);
  2868. !         LineUsed = lp - Lines;
  2869.       }
  2870.       }
  2871. --- 639,692 ----
  2872.       }
  2873. !     if (LockFile(fd, FALSE) >= 0)
  2874. !         break;
  2875. !     /* Wait for lock; close file -- might be unlinked -- and try again. */
  2876. !     (void)LockFile(fd, TRUE);
  2877. !     (void)close(fd);
  2878. !     }
  2879.   
  2880. !     if (fstat(fd, &Sb) < 0) {
  2881. !     (void)fprintf(stderr, "Can't open %s, %s\n", file, strerror(errno));
  2882. !     UnlockGroup(lfd, lockfile);
  2883. !     (void)close(fd);
  2884. !     return;
  2885. !     }
  2886.   
  2887. !     if (Sb.st_size != 0) {
  2888. !     /* Read in the whole file. */
  2889. !     if (B.Size == 0) {
  2890. !         B.Size = Sb.st_size + 1;
  2891. !         B.Data = NEW(char, B.Size);
  2892. !     }
  2893. !     else if (B.Size < Sb.st_size) {
  2894. !         B.Size = Sb.st_size + 1;
  2895. !         RENEW(B.Data, char, B.Size);
  2896. !     }
  2897. !     if (xread(fd, B.Data, Sb.st_size) < 0) {
  2898. !         (void)fprintf(stderr, "Can't read %s, %s\n",
  2899. !             file, strerror(errno));
  2900. !         UnlockGroup(lfd, lockfile);
  2901. !         (void)close(fd);
  2902. !         return;
  2903. !     }
  2904. !     B.Data[Sb.st_size] = '\0';
  2905. !     /* Count lines, get space. */
  2906. !     for (i = 1, p = B.Data; (p = strchr(p, '\n')) != NULL && *++p; i++)
  2907. !         continue;
  2908. !     if (LineSize < i + 1 + LineUsed) {
  2909. !         LineSize = i + 1 + LineUsed;
  2910. !         RENEW(Lines, LINE, LineSize);
  2911.       }
  2912. +     /* Add to lines array. */
  2913. +     for (lp = Lines + LineUsed, p = B.Data; ; p = next, lp++) {
  2914. +         if ((next = strchr(p, '\n')) == NULL)
  2915. +         break;
  2916. +         lp->Start = p;
  2917. +         lp->Length = ++next - p;
  2918. +         lp->Article = atol(p);
  2919. +     }
  2920. +     qsort((POINTER)Lines, (SIZE_T)(lp - Lines), sizeof lp[0],
  2921. +         LINEcompare);
  2922. +     LineUsed = lp - Lines;
  2923.       }
  2924. ***************
  2925. *** 686,687 ****
  2926. --- 720,722 ----
  2927.               UnlockGroup(lfd, lockfile);
  2928. +             (void)close(fd);
  2929.               return;
  2930. ***************
  2931. *** 705,706 ****
  2932. --- 740,742 ----
  2933.       UnlockGroup(lfd, lockfile);
  2934. +     (void)close(fd);
  2935.       return;
  2936. ***************
  2937. *** 711,714 ****
  2938.                  lockfile, strerror(errno));
  2939. -     UnlockGroup(lfd, lockfile);
  2940.   
  2941.   }
  2942. --- 747,756 ----
  2943.                  lockfile, strerror(errno));
  2944.   
  2945. +     /* Don't call UnlockGroup; do it inline. */
  2946. +     if (close(lfd) < 0)
  2947. +     (void)fprintf(stderr, "expireover cant close %s %s\n",
  2948. +         file, strerror(errno));
  2949. +     if (close(fd) < 0)
  2950. +     (void)fprintf(stderr, "expireover cant close unlinked %s %s\n",
  2951. +         file, strerror(errno));
  2952.   }
  2953. ***************
  2954. *** 955,957 ****
  2955.   BOOL
  2956. ! MakeSpoolDirectory(Name)
  2957.       register char    *Name;
  2958. --- 997,999 ----
  2959.   BOOL
  2960. ! MakeOverDir(Name)
  2961.       register char    *Name;
  2962. ***************
  2963. *** 1028,1034 ****
  2964.           }
  2965. !         else if (MakeSpoolDirectory(line))
  2966. !         AddLines(line, Spool);
  2967.           else
  2968. !         (void)fprintf(stderr, "expireover: cant mkdir %s, %s\n",
  2969. !             line, strerror(errno));
  2970.           continue;
  2971. --- 1070,1080 ----
  2972.           }
  2973. !         else if (!InSpoolDir) {
  2974. !         if (MakeOverDir(line))
  2975. !             AddLines(line, Spool);
  2976. !         else
  2977. !             (void)fprintf(stderr, "expireover: cant mkdir %s, %s\n",
  2978. !                 line, strerror(errno));
  2979. !         }
  2980.           else
  2981. !         AddLines(line, Spool);
  2982.           continue;
  2983. ***************
  2984. *** 1076,1078 ****
  2985.   
  2986. !     /* Parse JCL. */
  2987.       Dir = _PATH_OVERVIEWDIR;
  2988. --- 1122,1124 ----
  2989.   
  2990. !     /* Set defaults. */
  2991.       Dir = _PATH_OVERVIEWDIR;
  2992. ***************
  2993. *** 1082,1084 ****
  2994.       SortedInput = FALSE;
  2995. !     while ((i = getopt(ac, av, "aD:f:nsvz")) != EOF)
  2996.       switch (i) {
  2997. --- 1128,1133 ----
  2998.       SortedInput = FALSE;
  2999. !     (void)umask(NEWSUMASK);
  3000. !     /* Parse JCL. */
  3001. !     while ((i = getopt(ac, av, "aD:f:nO:svz")) != EOF)
  3002.       switch (i) {
  3003. ***************
  3004. *** 1100,1101 ****
  3005. --- 1149,1153 ----
  3006.           break;
  3007. +     case 'O':
  3008. +         SCHEMA = optarg;
  3009. +         break;
  3010.       case 's':
  3011. ***************
  3012. *** 1141 ****
  3013. --- 1193,1194 ----
  3014.   }
  3015.  
  3016.  
  3017. Index: expire/fastrm.c
  3018. ===================================================================
  3019. RCS file: expire/RCS/fastrm.c,v
  3020. retrieving revision 1.2
  3021. diff -c1 -r1.2 expire/fastrm.c
  3022. *** 1.2    1993/01/29 16:43:23
  3023. --- expire/fastrm.c    1993/03/18 21:03:52
  3024. ***************
  3025. *** 10,11 ****
  3026. --- 10,12 ----
  3027.   #include <stdio.h>
  3028. + #include <ctype.h>
  3029.   #include <sys/types.h>
  3030. ***************
  3031. *** 314,411 ****
  3032.   STATIC void
  3033. ! unlink_dir(list, num)
  3034. !     register dnode    *list;
  3035. !     register int    num;
  3036.   {
  3037. !     static dnode    **dptrs;
  3038. !     static int        ndp;
  3039. !     register dnode    *l;
  3040. !     register dnode    **pl;
  3041. !     register DIR    *dfd;
  3042. !     register DIRENTRY    *d;
  3043. !     register BOOL    sorted;
  3044. !     struct stat        sb;
  3045. !     if (!setup_dir(list->dir, num)) {
  3046. !     /* The directory doesn't exist, no point attempting to
  3047. !      * delete anything, just forget it all. */
  3048. !     if (list->dir)
  3049. !         DISPOSE(list->dir);
  3050. !     freelist(list);
  3051. !     return;
  3052. !     }
  3053. !     if (list->dir)
  3054. !     DISPOSE(list->dir);
  3055. !     if (sortdirs == 0 || num < sortdirs) {
  3056. !     if (prefix_len != 0) {
  3057. !         prefix_dir[prefix_len++] = '/';
  3058. !         prefix_dir[prefix_len] = '\0';
  3059. !     }
  3060. !     /*  Easier to just unlink the files than worry about the
  3061. !      *  order we unlink them in. */
  3062. !     while ((l = list) != NULL) {
  3063. !         unlink_node(l);
  3064. !         list = l->next;
  3065. !         if (l->longname)
  3066. !         DISPOSE(l->longname);
  3067. !         DISPOSE(l);
  3068. !     }
  3069. !     return;
  3070. !     }
  3071. !     if (ndp == 0) {
  3072. !     ndp = num;
  3073. !     dptrs = NEW(dnode*, ndp);
  3074. !     }
  3075. !     else if (num > ndp) {
  3076. !     ndp = num + 16;
  3077. !     RENEW(dptrs, dnode*, ndp);
  3078. !     }
  3079. !     if ((pl = dptrs) == NULL)
  3080. !     err_exit("Out of mem in unlink_dir");
  3081. !     for (sorted = TRUE, *pl = list, l = list->next; l; l = l->next) {
  3082. !     if (sorted && strcmp(NODENAME(*pl), NODENAME(l)) > 0)
  3083. !         sorted = FALSE;
  3084. !     *++pl = l;
  3085. !     }
  3086. !     if (!sorted)
  3087. !     qsort((char *)dptrs, num, sizeof (dnode *), comp);
  3088. !     if (prefix_len == 0) {
  3089. !     if ((dfd = opendir(".")) == NULL) {
  3090. !         (void)fprintf(stderr, "Can't open \".\" in directory \"%s\"\n",
  3091. !             cur_dir);
  3092. !         fatals++;
  3093. !         freelist(list);
  3094. !         return;
  3095. !     }
  3096. !     }
  3097. !     else {
  3098. !     if ((dfd = opendir(prefix_dir)) == NULL) {
  3099. !         if (prefix_dir[0] == '/')
  3100. !         (void)fprintf(stderr, "Can't open directory \"%s\"\n",
  3101. !             prefix_dir);
  3102. !         else
  3103. !         (void)fprintf(stderr, "Can't open directory \"%s\" in \"%s\"\n",
  3104. !             prefix_dir, cur_dir);
  3105. !         if (stat(prefix_dir, &sb) >= 0 || errno != ENOENT)
  3106. !             fatals++;
  3107. !         freelist(list);
  3108. !         return;
  3109. !     }
  3110. !     }
  3111.   
  3112. !     if (prefix_len != 0) {
  3113. !     prefix_dir[prefix_len++] = '/';
  3114. !     prefix_dir[prefix_len] = '\0';
  3115. !     }
  3116.   
  3117. !     while ((d = readdir(dfd)) != NULL)
  3118. !     if ((l = inlist(dptrs, num, d->d_name)) != NULL)
  3119. !         unlink_node(l);
  3120. !     (void)closedir(dfd);
  3121. !     freelist(list);
  3122.   }
  3123. --- 315,329 ----
  3124.   STATIC void
  3125. ! copynsegs(from, to, n)
  3126. !     register chr    *from;
  3127. !     register chr    *to;
  3128. !     register int    n;
  3129.   {
  3130. !     register chr    c;
  3131.   
  3132. !     while ((*to++ = c = *from++) != '\0')
  3133. !     if (c == '/' && --n <= 0)
  3134. !         break;
  3135.   
  3136. !     if (c == '/')
  3137. !     *--to = '\0';
  3138.   }
  3139. ***************
  3140. *** 426,444 ****
  3141.   
  3142. - STATIC void
  3143. - copynsegs(from, to, n)
  3144. -     register chr    *from;
  3145. -     register chr    *to;
  3146. -     register int    n;
  3147. - {
  3148. -     register chr    c;
  3149. -     while ((*to++ = c = *from++) != '\0')
  3150. -     if (c == '/' && --n <= 0)
  3151. -         break;
  3152. -     if (c == '/')
  3153. -     *--to = '\0';
  3154. - }
  3155.   /*
  3156. --- 344,345 ----
  3157. ***************
  3158. *** 614,615 ****
  3159. --- 515,616 ----
  3160.   
  3161. + STATIC void
  3162. + unlink_dir(list, num)
  3163. +     register dnode    *list;
  3164. +     register int    num;
  3165. + {
  3166. +     static dnode    **dptrs;
  3167. +     static int        ndp;
  3168. +     register dnode    *l;
  3169. +     register dnode    **pl;
  3170. +     register DIR    *dfd;
  3171. +     register DIRENTRY    *d;
  3172. +     register BOOL    sorted;
  3173. +     struct stat        sb;
  3174. +     if (!setup_dir(list->dir, num)) {
  3175. +     /* The directory doesn't exist, no point attempting to
  3176. +      * delete anything, just forget it all. */
  3177. +     if (list->dir)
  3178. +         DISPOSE(list->dir);
  3179. +     freelist(list);
  3180. +     return;
  3181. +     }
  3182. +     if (list->dir)
  3183. +     DISPOSE(list->dir);
  3184. +     if (sortdirs == 0 || num < sortdirs) {
  3185. +     if (prefix_len != 0) {
  3186. +         prefix_dir[prefix_len++] = '/';
  3187. +         prefix_dir[prefix_len] = '\0';
  3188. +     }
  3189. +     /*  Easier to just unlink the files than worry about the
  3190. +      *  order we unlink them in. */
  3191. +     while ((l = list) != NULL) {
  3192. +         unlink_node(l);
  3193. +         list = l->next;
  3194. +         if (l->longname)
  3195. +         DISPOSE(l->longname);
  3196. +         DISPOSE(l);
  3197. +     }
  3198. +     return;
  3199. +     }
  3200. +     if (ndp == 0) {
  3201. +     ndp = num;
  3202. +     dptrs = NEW(dnode*, ndp);
  3203. +     }
  3204. +     else if (num > ndp) {
  3205. +     ndp = num + 16;
  3206. +     RENEW(dptrs, dnode*, ndp);
  3207. +     }
  3208. +     if ((pl = dptrs) == NULL)
  3209. +     err_exit("Out of mem in unlink_dir");
  3210. +     for (sorted = TRUE, *pl = list, l = list->next; l; l = l->next) {
  3211. +     if (sorted && strcmp(NODENAME(*pl), NODENAME(l)) > 0)
  3212. +         sorted = FALSE;
  3213. +     *++pl = l;
  3214. +     }
  3215. +     if (!sorted)
  3216. +     qsort((char *)dptrs, num, sizeof (dnode *), comp);
  3217. +     if (prefix_len == 0) {
  3218. +     if ((dfd = opendir(".")) == NULL) {
  3219. +         (void)fprintf(stderr, "Can't open \".\" in directory \"%s\"\n",
  3220. +             cur_dir);
  3221. +         fatals++;
  3222. +         freelist(list);
  3223. +         return;
  3224. +     }
  3225. +     }
  3226. +     else {
  3227. +     if ((dfd = opendir(prefix_dir)) == NULL) {
  3228. +         if (prefix_dir[0] == '/')
  3229. +         (void)fprintf(stderr, "Can't open directory \"%s\"\n",
  3230. +             prefix_dir);
  3231. +         else
  3232. +         (void)fprintf(stderr, "Can't open directory \"%s\" in \"%s\"\n",
  3233. +             prefix_dir, cur_dir);
  3234. +         if (stat(prefix_dir, &sb) >= 0 || errno != ENOENT)
  3235. +             fatals++;
  3236. +         freelist(list);
  3237. +         return;
  3238. +     }
  3239. +     }
  3240. +     if (prefix_len != 0) {
  3241. +     prefix_dir[prefix_len++] = '/';
  3242. +     prefix_dir[prefix_len] = '\0';
  3243. +     }
  3244. +     while ((d = readdir(dfd)) != NULL)
  3245. +     if ((l = inlist(dptrs, num, d->d_name)) != NULL)
  3246. +         unlink_node(l);
  3247. +     (void)closedir(dfd);
  3248. +     freelist(list);
  3249. + }
  3250.   STATIC BOOL
  3251. ***************
  3252. *** 668,670 ****
  3253.           if (dotdot >= strlen(DotDot)/(SIZE_T)3)
  3254. !             dotdot = strlen(DotDot)/(SIZE_T)(3 - 1);
  3255.           break;
  3256. --- 669,671 ----
  3257.           if (dotdot >= strlen(DotDot)/(SIZE_T)3)
  3258. !             dotdot = strlen(DotDot)/(SIZE_T)3 - 1;
  3259.           break;
  3260.  
  3261.  
  3262. Index: expire/makeactive.c
  3263. ===================================================================
  3264. RCS file: expire/RCS/makeactive.c,v
  3265. retrieving revision 1.8
  3266. diff -c1 -r1.8 expire/makeactive.c
  3267. *** 1.8    1993/01/29 16:43:27
  3268. --- expire/makeactive.c    1993/03/18 21:03:53
  3269. ***************
  3270. *** 1,2 ****
  3271. ! /*  $Revision: 1.8 $
  3272.   **
  3273. --- 1,2 ----
  3274. ! /*  $Revision: 1.9 $
  3275.   **
  3276. ***************
  3277. *** 9,10 ****
  3278. --- 9,11 ----
  3279.   #include <sys/types.h>
  3280. + #include <sys/stat.h>
  3281.   #include <errno.h>
  3282. ***************
  3283. *** 252,253 ****
  3284. --- 253,255 ----
  3285.       ComputeMarks = FALSE;
  3286. +     (void)umask(NEWSUMASK);
  3287.   
  3288.  
  3289.  
  3290. Index: expire/makehistory.c
  3291. ===================================================================
  3292. RCS file: expire/RCS/makehistory.c,v
  3293. retrieving revision 1.13
  3294. diff -c1 -r1.13 expire/makehistory.c
  3295. *** 1.13    1993/01/29 16:43:28
  3296. --- expire/makehistory.c    1993/03/18 21:03:54
  3297. ***************
  3298. *** 1,2 ****
  3299. ! /*  $Revision: 1.13 $
  3300.   **
  3301. --- 1,2 ----
  3302. ! /*  $Revision: 1.14 $
  3303.   **
  3304. ***************
  3305. *** 33,35 ****
  3306.   STATIC char        SPOOL[] = _PATH_SPOOL;
  3307. ! STATIC char        NEWSLIB[] = _PATH_NEWSLIB;
  3308.   STATIC char        HISTORY[] = _PATH_HISTORY;
  3309. --- 33,35 ----
  3310.   STATIC char        SPOOL[] = _PATH_SPOOL;
  3311. ! STATIC char        *HISTORYDIR;
  3312.   STATIC char        HISTORY[] = _PATH_HISTORY;
  3313. ***************
  3314. *** 97,99 ****
  3315.   
  3316. !     xchdir(NEWSLIB);
  3317.   
  3318. --- 97,99 ----
  3319.   
  3320. !     xchdir(HISTORYDIR);
  3321.   
  3322. ***************
  3323. *** 587,588 ****
  3324. --- 587,589 ----
  3325.       tmpdir = _PATH_TMP;
  3326. +     (void)umask(NEWSUMASK);
  3327.   
  3328. ***************
  3329. *** 632,633 ****
  3330. --- 633,641 ----
  3331.       Usage();
  3332. +     if ((p = strrchr(TextFile, '/')) == NULL)
  3333. +     HISTORYDIR = _PATH_NEWSLIB;
  3334. +     else {
  3335. +     *p = '\0';
  3336. +     HISTORYDIR = COPY(TextFile);
  3337. +     *p = '/';
  3338. +     }
  3339.   
  3340. ***************
  3341. *** 646,648 ****
  3342.       /* Open history file. */
  3343. !     xchdir(NEWSLIB);
  3344.   
  3345. --- 654,656 ----
  3346.       /* Open history file. */
  3347. !     xchdir(HISTORYDIR);
  3348.   
  3349. ***************
  3350. *** 711,713 ****
  3351.       /* Move. */
  3352. !     xchdir(NEWSLIB);
  3353.   
  3354. --- 719,721 ----
  3355.       /* Move. */
  3356. !     xchdir(HISTORYDIR);
  3357.   
  3358.  
  3359.  
  3360. Index: expire/newsrequeue.c
  3361. ===================================================================
  3362. RCS file: expire/RCS/newsrequeue.c,v
  3363. retrieving revision 1.7
  3364. diff -c1 -r1.7 expire/newsrequeue.c
  3365. *** 1.7    1993/01/29 16:43:29
  3366. --- expire/newsrequeue.c    1993/03/18 21:03:55
  3367. ***************
  3368. *** 1,2 ****
  3369. ! /*  $Revision: 1.7 $
  3370.   **
  3371. --- 1,2 ----
  3372. ! /*  $Revision: 1.8 $
  3373.   **
  3374. ***************
  3375. *** 270,272 ****
  3376.   {
  3377. -     static char        **save;
  3378.       register int    i;
  3379. --- 270,271 ----
  3380. ***************
  3381. *** 274,278 ****
  3382.       register char    **argv;
  3383. !     if (save)
  3384. !     DISPOSE(save);
  3385.   
  3386. --- 273,275 ----
  3387.       register char    **argv;
  3388. !     char        **save;
  3389.   
  3390.  
  3391.  
  3392. Index: expire/prunehistory.c
  3393. ===================================================================
  3394. RCS file: expire/RCS/prunehistory.c,v
  3395. retrieving revision 1.6
  3396. diff -c1 -r1.6 expire/prunehistory.c
  3397. *** 1.6    1992/07/24 22:00:24
  3398. --- expire/prunehistory.c    1993/03/18 21:03:56
  3399. ***************
  3400. *** 1,2 ****
  3401. ! /*  $Revision: 1.6 $
  3402.   **
  3403. --- 1,2 ----
  3404. ! /*  $Revision: 1.7 $
  3405.   **
  3406. ***************
  3407. *** 139,141 ****
  3408.       }
  3409. !     if ((wfd = open(History, O_WRONLY)) == NULL) {
  3410.       (void)fprintf(stderr, "Can't open \"%s\" for writing, %s\n",
  3411. --- 139,141 ----
  3412.       }
  3413. !     if ((wfd = open(History, O_WRONLY)) < 0) {
  3414.       (void)fprintf(stderr, "Can't open \"%s\" for writing, %s\n",
  3415.  
  3416.  
  3417. Index: frontends/Makefile
  3418. ===================================================================
  3419. RCS file: frontends/RCS/Makefile,v
  3420. retrieving revision 1.18
  3421. diff -c1 -r1.18 frontends/Makefile
  3422. *** 1.18    1992/07/28 16:58:03
  3423. --- frontends/Makefile    1993/03/18 21:03:57
  3424. ***************
  3425. *** 1,2 ****
  3426. ! ##  $Revision: 1.18 $
  3427.   SHELL    = /bin/sh
  3428. --- 1,2 ----
  3429. ! ##  $Revision: 1.19 $
  3430.   SHELL    = /bin/sh
  3431. ***************
  3432. *** 22,32 ****
  3433.   ##  =()<NEWSBIN    =@<_PATH_NEWSBIN>@>()=
  3434. ! NEWSBIN    =/usr/local/news/bin
  3435.   ##  =()<INEWS    = @<_PATH_INEWS>@>()=
  3436. ! INEWS    = /usr/local/news/inews
  3437. ! ##  =()<RELAYNEWS    = @<_PATH_RELAYNEWS>@>()=
  3438. ! RELAYNEWS    = /usr/local/news/relaynews
  3439.   ##  =()<RNEWS    = @<_PATH_RNEWS>@>()=
  3440. ! RNEWS    = /usr/local/news/rnews
  3441.   ##  =()<RNEWSPROGS    = @<_PATH_RNEWSPROGS>@>()=
  3442. ! RNEWSPROGS    = /usr/local/news/bin/rnews
  3443.   ## =()<OWNER    = -O @<NEWSUSER>@ -G @<NEWSGROUP>@>()=
  3444. --- 22,30 ----
  3445.   ##  =()<NEWSBIN    =@<_PATH_NEWSBIN>@>()=
  3446. ! NEWSBIN    =/news/bin
  3447.   ##  =()<INEWS    = @<_PATH_INEWS>@>()=
  3448. ! INEWS    = /usr/local/bin/inews.nntp
  3449.   ##  =()<RNEWS    = @<_PATH_RNEWS>@>()=
  3450. ! RNEWS    = /news/bin/rnews/rnews
  3451.   ##  =()<RNEWSPROGS    = @<_PATH_RNEWSPROGS>@>()=
  3452. ! RNEWSPROGS    = /news/bin/rnews
  3453.   ## =()<OWNER    = -O @<NEWSUSER>@ -G @<NEWSGROUP>@>()=
  3454. ***************
  3455. *** 41,45 ****
  3456.   
  3457. ! SOURCES    = ctlinnd.c inews.c relaynews.c rnews.c
  3458.   
  3459. ! ALL    = inews relaynews rnews ctlinnd getlist innconfval decode encode
  3460.   
  3461. --- 39,43 ----
  3462.   
  3463. ! SOURCES    = ctlinnd.c inews.c rnews.c
  3464.   
  3465. ! ALL    = inews rnews ctlinnd getlist innconfval decode encode
  3466.   
  3467. ***************
  3468. *** 48,50 ****
  3469.   
  3470. ! install:    $(INEWS) $(RELAYNEWS) $(RNEWS) \
  3471.           $(NEWSBIN)/ctlinnd $(NEWSBIN)/getlist $(NEWSBIN)/innconfval \
  3472. --- 46,48 ----
  3473.   
  3474. ! install:    $(INEWS) $(RNEWS) \
  3475.           $(NEWSBIN)/ctlinnd $(NEWSBIN)/getlist $(NEWSBIN)/innconfval \
  3476. ***************
  3477. *** 62,65 ****
  3478.       $(CC) $(LDFLAGS) -o $@ inews.o $(NNTPLIB) $(LIBNEWS) $(LIBS)
  3479. - relaynews:    $(P) relaynews.o $(LIBNEWS)
  3480. -     $(CC) $(LDFLAGS) -o $@ relaynews.o $(LIBNEWS) $(LIBS)
  3481.   rnews:        $(P) rnews.o $(LIBNEWS)
  3482. --- 60,61 ----
  3483. ***************
  3484. *** 87,89 ****
  3485.       lint $(LINTFLAGS) inews.c      $(LINTLIB) $(LINTFILTER)  >lint
  3486. -     lint $(LINTFLAGS) relaynews.c  $(LINTLIB) $(LINTFILTER) >>lint
  3487.       lint $(LINTFLAGS) rnews.c      $(LINTLIB) $(LINTFILTER) >>lint
  3488. --- 83,84 ----
  3489. ***************
  3490. *** 108,126 ****
  3491.   $(INEWS):        inews
  3492. !     sh ../installit.sh $(OWNER) -m 02555 -b .OLD $? $@
  3493. ! $(RELAYNEWS):        relaynews
  3494. !     sh ../installit.sh $(OWNER) -m  0555 -b .OLD $? $@
  3495.   $(RNEWS):        rnews
  3496. !     sh ../installit.sh $(OWNER) -m 02555 -b .OLD $? $@
  3497.   $(NEWSBIN)/ctlinnd:    ctlinnd
  3498. !     sh ../installit.sh $(OWNER) -m  0550 -b .OLD $? $@
  3499.   $(NEWSBIN)/getlist:    getlist
  3500. !     sh ../installit.sh $(OWNER) -m  0555 -b .OLD $? $@
  3501.   $(NEWSBIN)/innconfval:    innconfval
  3502. !     sh ../installit.sh $(OWNER) -m  0555 -b .OLD $? $@
  3503.   $(RNEWSPROGS)/c7unbatch:    c7unbatch.sh
  3504. !     sh ../installit.sh $(OWNER) -m  0555 -b .OLD $? $@
  3505.   $(RNEWSPROGS)/decode:        decode
  3506. !     sh ../installit.sh $(OWNER) -m  0555 -b .OLD $? $@
  3507.   $(RNEWSPROGS)/encode:        encode
  3508. !     sh ../installit.sh $(OWNER) -m  0555 -b .OLD $? $@
  3509.   
  3510. --- 103,119 ----
  3511.   $(INEWS):        inews
  3512. !     $(SHELL) ../installit.sh $(OWNER) -m 02555 -b .OLD $? $@
  3513.   $(RNEWS):        rnews
  3514. !     $(SHELL) ../installit.sh $(OWNER) -m 02555 -b .OLD $? $@
  3515.   $(NEWSBIN)/ctlinnd:    ctlinnd
  3516. !     $(SHELL) ../installit.sh $(OWNER) -m  0550 -b .OLD $? $@
  3517.   $(NEWSBIN)/getlist:    getlist
  3518. !     $(SHELL) ../installit.sh $(OWNER) -m  0555 -b .OLD $? $@
  3519.   $(NEWSBIN)/innconfval:    innconfval
  3520. !     $(SHELL) ../installit.sh $(OWNER) -m  0555 -b .OLD $? $@
  3521.   $(RNEWSPROGS)/c7unbatch:    c7unbatch.sh
  3522. !     $(SHELL) ../installit.sh $(OWNER) -m  0555 -b .OLD $? $@
  3523.   $(RNEWSPROGS)/decode:        decode
  3524. !     $(SHELL) ../installit.sh $(OWNER) -m  0555 -b .OLD $? $@
  3525.   $(RNEWSPROGS)/encode:        encode
  3526. !     $(SHELL) ../installit.sh $(OWNER) -m  0555 -b .OLD $? $@
  3527.   
  3528. ***************
  3529. *** 157,163 ****
  3530.   innconfval.o:    ../include/macros.h
  3531. - relaynews.o:    ../include/clibrary.h
  3532. - relaynews.o:    ../include/configdata.h
  3533. - relaynews.o:    ../include/libinn.h
  3534. - relaynews.o:    ../include/macros.h
  3535. - relaynews.o:    ../include/paths.h
  3536.   rnews.o:    ../include/clibrary.h
  3537. --- 150,151 ----
  3538.  
  3539.  
  3540. Index: frontends/c7unbatch.sh
  3541. ===================================================================
  3542. RCS file: frontends/RCS/c7unbatch.sh,v
  3543. retrieving revision 1.2
  3544. diff -c1 -r1.2 frontends/c7unbatch.sh
  3545. *** 1.2    1992/09/01 15:38:36
  3546. --- frontends/c7unbatch.sh    1993/03/18 21:03:58
  3547. ***************
  3548. *** 1,2 ****
  3549.   #! /bin/sh
  3550. ! decode | /usr/ucb/compress -d | rnews $*
  3551. --- 1,2 ----
  3552.   #! /bin/sh
  3553. ! decode | /usr/ucb/compress -d
  3554.  
  3555.  
  3556. Index: frontends/decode.c
  3557. ===================================================================
  3558. RCS file: frontends/RCS/decode.c,v
  3559. retrieving revision 1.3
  3560. diff -c1 -r1.3 frontends/decode.c
  3561. *** 1.3    1993/01/29 16:43:32
  3562. --- frontends/decode.c    1993/03/18 21:04:00
  3563. ***************
  3564. *** 25,28 ****
  3565.   */
  3566. ! #define ENDMARK1    ((90 * 91 + 90) / 91 + ' ')
  3567. ! #define ENDMARK2    ((90 * 91 + 90) % 91 + ' ')
  3568.   
  3569. --- 25,28 ----
  3570.   */
  3571. ! #define ENDMARK1    ((90 * 91 + 90) / 91)
  3572. ! #define ENDMARK2    ((90 * 91 + 90) % 91)
  3573.   
  3574. ***************
  3575. *** 34,37 ****
  3576.   static void
  3577. ! pack6bit(p, n, last)
  3578. !     register char    *p;
  3579.       register int    n;
  3580. --- 34,36 ----
  3581.   static void
  3582. ! pack6(n, last)
  3583.       register int    n;
  3584. ***************
  3585. *** 43,57 ****
  3586.   
  3587. !     if (last) {
  3588. !     if ((i = p[n - 1]) >= 3) {
  3589. !         /* Do the best we can. */
  3590. !         (void)fprintf(stderr, "Badly-terminated file\n");
  3591. !         i = 3;
  3592. !     }
  3593. !     }
  3594. !     else
  3595.       i = 3;
  3596.   
  3597. !     b3[0] = (p[0] << 2) | ((p[1] >> 4) & 0x03);
  3598. !     b3[1] = (p[1] << 4) | ((p[2] >> 2) & 0x0F);
  3599. !     b3[2] = (p[2] << 6) | ( p[3]       & 0x3F);
  3600.       for (q = b3; --i >= 0; )
  3601. --- 42,53 ----
  3602.   
  3603. !     i = 3;
  3604. !     if (last && (i = Buffer[n - 1]) >= 3) {
  3605. !     /* Do the best we can. */
  3606. !     (void)fprintf(stderr, "Badly-terminated file.\n");
  3607.       i = 3;
  3608. +     }
  3609.   
  3610. !     b3[0] = (Buffer[0] << 2) | ((Buffer[1] >> 4) & 0x03);
  3611. !     b3[1] = (Buffer[1] << 4) | ((Buffer[2] >> 2) & 0x0F);
  3612. !     b3[2] = (Buffer[2] << 6) | ( Buffer[3]       & 0x3F);
  3613.       for (q = b3; --i >= 0; )
  3614. ***************
  3615. *** 90,92 ****
  3616.       if (++i == 4) {
  3617. !         /* Inline expansion of pack6bit. */
  3618.           b3[0] = (Buffer[0] << 2) | ((Buffer[1] >> 4) & 0x03);
  3619. --- 86,88 ----
  3620.       if (++i == 4) {
  3621. !         /* Inline expansion of pack6. */
  3622.           b3[0] = (Buffer[0] << 2) | ((Buffer[1] >> 4) & 0x03);
  3623. ***************
  3624. *** 107,109 ****
  3625.       if (last || i == 4) {
  3626. !     pack6bit(Buffer, i, last);
  3627.       i = 0;
  3628. --- 103,105 ----
  3629.       if (last || i == 4) {
  3630. !     pack6(i, last);
  3631.       i = 0;
  3632. ***************
  3633. *** 126,127 ****
  3634. --- 122,124 ----
  3635.       register int    cnt;
  3636. +     char        *base;
  3637.       char        b12[12];
  3638. ***************
  3639. *** 129,131 ****
  3640.   
  3641. !     for (p = b12, i = 12, cnt = 0, first = 1; (c = getchar()) != EOF; ) {
  3642.       if (c < ' ' || c >= ' ' + 91) {
  3643. --- 126,129 ----
  3644.   
  3645. !     base = p = b12;
  3646. !     for (i = 12, cnt = 0, first = 1; (c = getchar()) != EOF; ) {
  3647.       if (c < ' ' || c >= ' ' + 91) {
  3648. ***************
  3649. *** 147,149 ****
  3650.               first = 0;
  3651. !         p = c12;
  3652.           }
  3653. --- 145,147 ----
  3654.               first = 0;
  3655. !         base = p = c12;
  3656.           }
  3657. ***************
  3658. *** 151,153 ****
  3659.           pack12(b12, 12, 0);
  3660. !         p = b12;
  3661.           }
  3662. --- 149,151 ----
  3663.           pack12(b12, 12, 0);
  3664. !         base = p = b12;
  3665.           }
  3666. ***************
  3667. *** 157,159 ****
  3668.   
  3669. !     if (p >= &b12[0] && p < &b12[12]) {
  3670.       if (!first)
  3671. --- 155,157 ----
  3672.   
  3673. !     if (base == b12) {
  3674.       if (!first)
  3675. ***************
  3676. *** 164,171 ****
  3677.   
  3678. !     if (i != 12) {
  3679. !     if (p >= &b12[0] && p < &b12[12])
  3680. !         pack12(b12, 12-i, cnt);
  3681. !     else
  3682. !         pack12(c12, 12-i, cnt);
  3683. !     }
  3684.   
  3685. --- 162,165 ----
  3686.   
  3687. !     if (i != 12)
  3688. !     pack12(base, 12 - i, cnt);
  3689.   
  3690.  
  3691.  
  3692. Index: frontends/getlist.c
  3693. ===================================================================
  3694. RCS file: frontends/RCS/getlist.c,v
  3695. retrieving revision 1.3
  3696. diff -c1 -r1.3 frontends/getlist.c
  3697. *** 1.3    1993/01/29 16:43:34
  3698. --- frontends/getlist.c    1993/03/18 21:04:01
  3699. ***************
  3700. *** 1,2 ****
  3701. ! /*  $Revision: 1.3 $
  3702.   **
  3703. --- 1,2 ----
  3704. ! /*  $Revision: 1.4 $
  3705.   **
  3706. ***************
  3707. *** 69,73 ****
  3708.       case 0:
  3709. -     break;
  3710.       case 1:
  3711. -     pattern = av[1];
  3712.       break;
  3713. --- 69,71 ----
  3714. ***************
  3715. *** 75,76 ****
  3716. --- 73,77 ----
  3717.       pattern = av[1];
  3718. +     break;
  3719. +     case 3:
  3720. +     pattern = av[1];
  3721.       types = av[2];
  3722. ***************
  3723. *** 81,85 ****
  3724.       else {
  3725. -     if (pattern != NULL || types != NULL)
  3726. -         Usage();
  3727.       list = av[0];
  3728.       }
  3729. --- 82,86 ----
  3730.       else {
  3731.       list = av[0];
  3732. +     if (EQ(list, "active") && (pattern != NULL || types != NULL))
  3733. +         Usage();
  3734.       }
  3735. ***************
  3736. *** 94,96 ****
  3737.       if (NNTPconnect(host, &FromServer, &ToServer, buff) < 0) {
  3738. !     (void)fprintf(stderr, "Can't connect to server, %s.\n",
  3739.           buff[0] ? buff : strerror(errno));
  3740. --- 95,97 ----
  3741.       if (NNTPconnect(host, &FromServer, &ToServer, buff) < 0) {
  3742. !     (void)fprintf(stderr, "Can't connect to server, %s\n",
  3743.           buff[0] ? buff : strerror(errno));
  3744. ***************
  3745. *** 178,181 ****
  3746.       CAclose();
  3747. !     (void)fclose(FromServer);
  3748.       (void)fclose(ToServer);
  3749.       exit(i);
  3750. --- 179,184 ----
  3751.       CAclose();
  3752. !     (void)fprintf(ToServer, "quit\r\n");
  3753.       (void)fclose(ToServer);
  3754. +     (void)fgets(buff, sizeof buff, FromServer);
  3755. +     (void)fclose(FromServer);
  3756.       exit(i);
  3757.  
  3758.  
  3759. Index: frontends/inews.c
  3760. ===================================================================
  3761. RCS file: frontends/RCS/inews.c,v
  3762. retrieving revision 1.32
  3763. diff -c1 -r1.32 frontends/inews.c
  3764. *** 1.32    1993/01/29 16:43:35
  3765. --- frontends/inews.c    1993/03/18 21:04:04
  3766. ***************
  3767. *** 1,2 ****
  3768. ! /*  $Revision: 1.32 $
  3769.   **
  3770. --- 1,2 ----
  3771. ! /*  $Revision: 1.33 $
  3772.   **
  3773. ***************
  3774. *** 47,48 ****
  3775. --- 47,49 ----
  3776.   
  3777. + STATIC BOOL    Dump;
  3778.   STATIC BOOL    Revoked;
  3779. ***************
  3780. *** 977,979 ****
  3781.       case NF_FLAG_MODERATED:
  3782. !         if (!approved) {
  3783.           mailed = MailArticle(group, article);
  3784. --- 978,984 ----
  3785.       case NF_FLAG_MODERATED:
  3786. !         if (Dump)
  3787. !         (void)fprintf(stderr,
  3788. !             "%s is moderated -- article would be mailed\n",
  3789. !             group);
  3790. !         else if (!approved) {
  3791.           mailed = MailArticle(group, article);
  3792. ***************
  3793. *** 1175,1177 ****
  3794.       char        SpoolMessage[NNTP_STRLEN + 2];
  3795. -     BOOL        Dump;
  3796.       BOOL        DoSignature;
  3797. --- 1180,1181 ----
  3798. ***************
  3799. *** 1191,1192 ****
  3800. --- 1195,1197 ----
  3801.       AddOrg = TRUE;
  3802. +     (void)umask(NEWSUMASK);
  3803.   
  3804. ***************
  3805. *** 1348,1356 ****
  3806.   
  3807. -     if (Spooling) {
  3808. -     (void)fprintf(stderr, "Warning %s -- Article will be spooled.\n",
  3809. -         SpoolMessage);
  3810. -     Spoolit(article, Length, deadfile);
  3811. -     exit(0);
  3812. -     }
  3813.       if (Dump) {
  3814. --- 1353,1354 ----
  3815. ***************
  3816. *** 1371,1372 ****
  3817. --- 1369,1377 ----
  3818.       QuitServer(0);
  3819. +     }
  3820. +     if (Spooling) {
  3821. +     (void)fprintf(stderr, "Warning %s -- Article will be spooled.\n",
  3822. +         SpoolMessage);
  3823. +     Spoolit(article, Length, deadfile);
  3824. +     exit(0);
  3825.       }
  3826.  
  3827.  
  3828. Index: frontends/rnews.c
  3829. ===================================================================
  3830. RCS file: frontends/RCS/rnews.c,v
  3831. retrieving revision 1.23
  3832. diff -c1 -r1.23 frontends/rnews.c
  3833. *** 1.23    1993/01/29 16:43:37
  3834. --- frontends/rnews.c    1993/03/18 21:04:06
  3835. ***************
  3836. *** 1,2 ****
  3837. ! /*  $Revision: 1.23 $
  3838.   **
  3839. --- 1,2 ----
  3840. ! /*  $Revision: 1.24 $
  3841.   **
  3842. ***************
  3843. *** 98,100 ****
  3844.       if (i == MAX_FORKS) {
  3845. !         syslog(L_ERROR, "cant fork %s %m -- spooling");
  3846.           return -1;
  3847. --- 98,100 ----
  3848.       if (i == MAX_FORKS) {
  3849. !         syslog(L_ERROR, "cant fork %s %m -- spooling", path);
  3850.           return -1;
  3851. ***************
  3852. *** 101,103 ****
  3853.       }
  3854. !     syslog(L_NOTICE, "cant fork %s -- waiting");
  3855.       (void)sleep(60);
  3856. --- 101,103 ----
  3857.       }
  3858. !     syslog(L_NOTICE, "cant fork %s -- waiting", path);
  3859.       (void)sleep(60);
  3860. ***************
  3861. *** 164,168 ****
  3862.   **  Make a temporary filename that is unlikely to collide with mktemp
  3863. ! **  or cause problems for sites with 14-character filename limits.
  3864. ! **  Used to generate names so they would sort in time order, but there
  3865. ! **  is no real need for that.
  3866.   */
  3867. --- 164,167 ----
  3868.   **  Make a temporary filename that is unlikely to collide with mktemp
  3869. ! **  or cause problems for sites with 14-character filename limits,
  3870. ! **  and that hints at the sending host.
  3871.   */
  3872. ***************
  3873. *** 173,182 ****
  3874.   {
  3875. !     time_t    now;
  3876. !     (void)time(&now);
  3877. !     now &= 0xFFFFFFFF;
  3878. !     if (UUCPHost)
  3879. !     (void)sprintf(buff, "%s/%.8sXXXXXX", dir, UUCPHost);
  3880. !     else
  3881. !     (void)sprintf(buff, "%s/%08.8lxXXXXXX", dir, (long)now);
  3882.       (void)mktemp(buff);
  3883. --- 172,174 ----
  3884.   {
  3885. !     (void)sprintf(buff, "%s/%.8sXXXXXX", dir, UUCPHost ? UUCPHost : "unknown");
  3886.       (void)mktemp(buff);
  3887. ***************
  3888. *** 311,312 ****
  3889. --- 303,305 ----
  3890.   #if    defined(SYSLOG_RNEWS_LOG_DUPS)
  3891. +     *p = '\0';
  3892.       syslog(L_NOTICE, "duplicate %s %s", id, path);
  3893. ***************
  3894. *** 314,316 ****
  3895.   #if    defined(FILE_RNEWS_LOG_DUPS)
  3896. !     if ((F = fopen(_PATH_RNEWS_DUP_LOG)) != NULL) {
  3897.           (void)fprintf(stderr, "duplicate %s %s", id, path);
  3898. --- 307,310 ----
  3899.   #if    defined(FILE_RNEWS_LOG_DUPS)
  3900. !     if ((F = fopen(_PATH_RNEWS_DUP_LOG, "a")) != NULL) {
  3901. !         *p = '\0';
  3902.           (void)fprintf(stderr, "duplicate %s %s", id, path);
  3903. ***************
  3904. *** 375,376 ****
  3905. --- 369,371 ----
  3906.       register int    i;
  3907. +     BOOL        ok;
  3908.   
  3909. ***************
  3910. *** 394,396 ****
  3911.       if (i < 0) {
  3912. !         syslog(L_FATAL, "cant fread after %ld bytes %m", used);
  3913.           exit(1);
  3914. --- 389,391 ----
  3915.       if (i < 0) {
  3916. !         syslog(L_FATAL, "cant fread after %d bytes %m", used);
  3917.           exit(1);
  3918. ***************
  3919. *** 410,412 ****
  3920.   
  3921. !     return Process(article);
  3922.   }
  3923. --- 405,409 ----
  3924.   
  3925. !     ok = Process(article);
  3926. !     DISPOSE(article);
  3927. !     return ok;
  3928.   }
  3929. ***************
  3930. *** 616,617 ****
  3931. --- 613,615 ----
  3932.       char        buff[SMBUF];
  3933. +     char        hostname[10];
  3934.       int            fd;
  3935. ***************
  3936. *** 653,654 ****
  3937. --- 651,655 ----
  3938.       }
  3939. +     (void)strncpy(hostname, InputFile, 8);
  3940. +     hostname[8] = '\0';
  3941. +     UUCPHost = hostname;
  3942.       ok = UnpackOne(&fd, &i);
  3943. ***************
  3944. *** 749,752 ****
  3945.   {
  3946.       /* Open the remote connection. */
  3947. !     if (NNTPconnect(server, &FromServer, &ToServer, buff) < 0)
  3948.       return FALSE;
  3949. --- 750,759 ----
  3950.   {
  3951. +     int        i;
  3952.       /* Open the remote connection. */
  3953. !     if (server)
  3954. !     i = NNTPconnect(server, &FromServer, &ToServer, buff);
  3955. !     else
  3956. !     i = NNTPremoteopen(&FromServer, &ToServer, buff);
  3957. !     if (i < 0)
  3958.       return FALSE;
  3959. ***************
  3960. *** 815,816 ****
  3961. --- 822,824 ----
  3962.       UUCPHost = getenv(_ENV_UUCPHOST);
  3963. +     (void)umask(NEWSUMASK);
  3964.   
  3965.  
  3966.  
  3967. Index: include/clibrary.h
  3968. ===================================================================
  3969. RCS file: include/RCS/clibrary.h,v
  3970. retrieving revision 1.16
  3971. diff -c1 -r1.16 include/clibrary.h
  3972. *** 1.16    1993/01/29 16:51:09
  3973. --- include/clibrary.h    1993/03/18 21:04:07
  3974. ***************
  3975. *** 1,2 ****
  3976. ! /*  $Revision: 1.16 $
  3977.   **
  3978. --- 1,2 ----
  3979. ! /*  $Revision: 1.17 $
  3980.   **
  3981. ***************
  3982. *** 68,70 ****
  3983.   #define FD_ISSET(n, p)    ((p)->fds_bits[(n) / NFDBITS] & (1 << ((n) % NFDBITS)))
  3984. ! #define FD_ZERO(p)    bzero((char *)(p), sizeof(*(p)))
  3985.   #endif    /* defined(FD_SETSIZE) */
  3986. --- 68,70 ----
  3987.   #define FD_ISSET(n, p)    ((p)->fds_bits[(n) / NFDBITS] & (1 << ((n) % NFDBITS)))
  3988. ! #define FD_ZERO(p)    (void)memset((POINTER)(p), 0, sizeof *(p))
  3989.   #endif    /* defined(FD_SETSIZE) */
  3990.  
  3991.  
  3992. Index: include/configdata.h
  3993. ===================================================================
  3994. RCS file: include/RCS/configdata.h,v
  3995. retrieving revision 1.28
  3996. diff -c1 -r1.28 include/configdata.h
  3997. *** 1.28    1993/01/29 16:51:10
  3998. --- include/configdata.h    1993/03/18 21:04:11
  3999. ***************
  4000. *** 1,2 ****
  4001. ! /*  $Revision: 1.28 $
  4002.   **
  4003. --- 1,2 ----
  4004. ! /*  $Revision: 1.29 $
  4005.   **
  4006. ***************
  4007. *** 58,59 ****
  4008. --- 58,62 ----
  4009.   #define PATHMASTER        "not-for-mail"
  4010. +     /* Umask to set. */
  4011. +     /* =()<#define NEWSUMASK        @<NEWSUMASK>@>()= */
  4012. + #define NEWSUMASK        0
  4013.       /* Mode that incoming articles are created under. */
  4014. ***************
  4015. *** 261,263 ****
  4016.       /* =()<#define ICD_SYNC_COUNT    @<ICD_SYNC_COUNT>@>()= */
  4017. ! #define ICD_SYNC_COUNT    10
  4018.       /* Tell resolver _res.options to be fast? */
  4019. --- 264,266 ----
  4020.       /* =()<#define ICD_SYNC_COUNT    @<ICD_SYNC_COUNT>@>()= */
  4021. ! #define ICD_SYNC_COUNT    1
  4022.       /* Tell resolver _res.options to be fast? */
  4023.  
  4024.  
  4025. Index: include/myserver.h
  4026. ===================================================================
  4027. RCS file: include/RCS/myserver.h,v
  4028. retrieving revision 1.2
  4029. diff -c1 -r1.2 include/myserver.h
  4030. *** 1.2    1991/11/27 17:08:06
  4031. --- include/myserver.h    1993/03/18 21:04:12
  4032. ***************
  4033. *** 1,2 ****
  4034. ! /*  $Revision: 1.2 $
  4035.   **
  4036. --- 1,2 ----
  4037. ! /*  $Revision: 1.3 $
  4038.   **
  4039. ***************
  4040. *** 13,15 ****
  4041. --- 13,18 ----
  4042.   #define NNTP_CLASS_OK            '2'
  4043. + #define NNTP_CLASS_ERROR        '4'
  4044.   #define NNTP_CLASS_FATAL        '5'
  4045. + #define NNTP_SYNTAX_VAL            501
  4046.   #define NNTP_STRLEN            512
  4047. ***************
  4048. *** 19,20 ****
  4049. --- 22,24 ----
  4050.   #define CHAR_OK            NNTP_CLASS_OK
  4051. + #define CHAR_ERR        NNTP_CLASS_ERROR
  4052.   #define CHAR_FATAL        NNTP_CLASS_FATAL
  4053. ***************
  4054. *** 21,22 ****
  4055. --- 25,27 ----
  4056.   #define ERR_NOGROUP        NNTP_NOSUCHGROUP_VAL
  4057. + #define ERR_CMDSYN        NNTP_SYNTAX_VAL
  4058.   
  4059.  
  4060.  
  4061. Index: include/nntp.h
  4062. ===================================================================
  4063. RCS file: include/RCS/nntp.h,v
  4064. retrieving revision 1.16
  4065. diff -c1 -r1.16 include/nntp.h
  4066. *** 1.16    1993/01/29 16:51:15
  4067. --- include/nntp.h    1993/03/18 21:04:14
  4068. ***************
  4069. *** 1,2 ****
  4070. ! /*  $Revision: 1.16 $
  4071.   **
  4072. --- 1,2 ----
  4073. ! /*  $Revision: 1.17 $
  4074.   **
  4075. ***************
  4076. *** 48,49 ****
  4077. --- 48,50 ----
  4078.   #define NNTP_OVERVIEW_FOLLOWS_VAL    224
  4079. + #define NNTP_DATE_FOLLOWS_VAL        111
  4080.   #define NNTP_POSTOK            "200"
  4081.  
  4082.  
  4083. Index: include/patchlevel.h
  4084. ===================================================================
  4085. RCS file: include/RCS/patchlevel.h,v
  4086. retrieving revision 1.13
  4087. diff -c1 -r1.13 include/patchlevel.h
  4088. *** 1.13    1993/01/29 16:51:16
  4089. --- include/patchlevel.h    1993/03/18 21:04:16
  4090. ***************
  4091. *** 1,2 ****
  4092. ! /* $Revision: 1.13 $
  4093.   **
  4094. --- 1,2 ----
  4095. ! /* $Revision: 1.14 $
  4096.   **
  4097. ***************
  4098. *** 3,4 ****
  4099. --- 3,89 ----
  4100.   **  $Log: patchlevel.h,v $
  4101. + **  Revision 1.14  1993/03/18  21:04:15  rsalz
  4102. + **  patch04:  Add NEWSUMASK (default 2) and have appropriate programs set it.
  4103. + **  patch04:  Add comment about NEWSLIB to config.dist <chongo@ncd.com>
  4104. + **  patch04:  Add YACC config variable.
  4105. + **  patch04:  Alias FNDELAY to O_NDELAY for systems without it <urlichs@smurf.sub.org>
  4106. + **  patch04:  Use $(SHELL) not sh in Makefiles <osm@msen.com>
  4107. + **  patch04:  Use "echo ...|su" not "su -c ..." in rc.news and BUILD.
  4108. + **  patch04:  Document setsockopt/svr4 problems.
  4109. + **  patch04:  overview.fmt.5 referenced makeoverview <henrich@crh.cl.msu.edu>.
  4110. + **  patch04:  Various typos in documentation <ry66@rz;uni-karlsruhe.de>,
  4111. + **  patch04:  <robert@steffi.demon.co.uk>, <wdh@grouper.mkt.csd.harris.com>.
  4112. + **  patch04:  Add sample newsfeeds entry to overchan.8
  4113. + **  patch04:  More text for innwatch.ctl, ``make update'', news overview <rsalz>.
  4114. + **  patch04:  inews can spool, so you need rnews; update inews.1
  4115. + **  patch04:  Add rnews explanations to Install.ms.1
  4116. + **  patch04:  Inews should not spool or email if -D given.
  4117. + **  patch04:  rnews had bad fopen call <mam@mamunx.garmhausen.de>
  4118. + **  patch04:  rnews could not connect to remote server.
  4119. + **  patch04:  rnews leaked memory in ReadRemainder.
  4120. + **  patch04:  decode unpacked end wrong.
  4121. + **  patch04:  decode used bad pointer comparisons.
  4122. + **  patch04:  #if was backwards in syslog/syslogd.c <peter@dialix.oz.au>.
  4123. + **  patch04:  Remove leading space in filenames in syslog.conf
  4124. + **  patch04:  Add -O flag to expireover; fix sorting bug <rob@violet.berkeley.edu>.
  4125. + **  patch04:  *** RUN "expireover -a -s" SOON **
  4126. + **  patch04:  Malloc overrun in expireover.c article.c <rob@agate.berkeley.edu>
  4127. + **  patch04:  Have overchan create needed dirs if overview dir != spool dir.
  4128. + **  patch04:  Add overchan .o dependencies to backends/Makefile.
  4129. + **  patch04:  avoid unneeded unlink/group in expireover <tale@uunet.uu.net>
  4130. + **  patch04:  Add -g to expire <tal@warren.mentorg.com>
  4131. + **  patch04:  faster raceless expireover/overchan locking <rob@agate.berkeley.edu>
  4132. + **  patch04:  use caseEQ not EQ in CMDmode in nnrpd <urlichs@smurf.sub.org>
  4133. + **  patch04:  Two wrong CloseOnExec calls in article.c <stevo@elroy.Jpl.Nasa.Gov>
  4134. + **  patch04:  Have nnrpd's HISgetent return (char *) not (STRING).
  4135. + **  patch04:  Remove STATIC from nnrpd's CMD_unimp function definition; change
  4136. + **  patch04:  it to recognize slave command.
  4137. + **  patch04:  Add "date" command (from nntpv2 draft) to nnrpd.
  4138. + **  patch04:  Add -u flag and statistics to nntpget.
  4139. + **  patch04:  Add -p flag to filechan, buffchan.
  4140. + **  patch04:  buffchan shouldn't open dropped sites.
  4141. + **  patch04:  Add -A flag to innxmit.
  4142. + **  patch04:  newsrequeue re-used variable; coredumped if not logfile mode.
  4143. + **  patch04:  expireover and fastrm need <ctype.h>.
  4144. + **  patch04:  Move functions in fastrm so STATIC declaration is okay.
  4145. + **  patch04:  BUILD and makehistory no longer assume history is in NEWSLIB.
  4146. + **  patch04:  Spelled Jon's name wrong in dbz.pch <davison@borland.com>
  4147. + **  patch04:  Use memset not bzero in local FD_ZERO macro.
  4148. + **  patch04:  getlist parsed positional arguments wrong <chongo@ncd.com>
  4149. + **  patch04:  getlist did not send a QUIT to the server.
  4150. + **  patch04:  Reverse order of elements in include/uio.h <aej@wpi.WPI.EDU>
  4151. + **  patch04:  Have GetFQDN try to force NIS/YP to use DNS <wietse@wzv.win.tue.nl>
  4152. + **  patch04:  Fix date parser when hour is 12.
  4153. + **  patch04:  Typo in header in send-ihave <mit@huie.hokudai.ac.jp>
  4154. + **  patch04:  Had senduucp.log in samples/scanlogs <earle@isolar.Tujunga.CA.US>
  4155. + **  patch04:  Have innwatch not complain to console if innd dies <mcooper@usc.edu>
  4156. + **  patch04:  Add logwatch into innwatch <Christophe.Wolfhugel@grasp1.univ-lyon1.fr>
  4157. + **  patch04:  rmgroup, newgroup, checkgroup are better about updating newsgroups
  4158. + **  patch04:  <cs@germany.eu.net>
  4159. + **  patch04:  Spurious erroneous mail line in rmgroup.
  4160. + **  patch04:  checkgroups mail message is now more clear.
  4161. + **  patch04:  Convert remaining scripts in samples to use innshellvars
  4162. + **  patch04:  Fix dataloss and fd leak in SITEflush <cjj@sun.com>
  4163. + **  patch04:  Don't use strlen on mmap'd active file <bobs@monty.rand.org>
  4164. + **  patch04:  Used ModeReason not RejectReason in CCmode, CCreject<dem@meaddata.com>
  4165. + **  patch04:  Used wrong argv[] in CCreject <dem@meaddata.com>
  4166. + **  patch04:  Don't free NULL pointer in innd/rc.c <peter@dialix.oz.au>.
  4167. + **  patch04:  Set all WIP's properly to NULL <dem@meaddata.com>
  4168. + **  patch04:  SITEparsefile didn't free old ME entry <dem@meaddata.com>
  4169. + **  patch04:  innd had typo in NICE_KIDS #if test <enger@seka.reston.ans.net>
  4170. + **  patch04:  Add (void) to setsid call in innd <stevo@elroy.Jpl.Nasa.Gov>
  4171. + **  patch04:  SITEwantsgroup didn't check ME patterns
  4172. + **  patch04:  <watanabe@argon.material.tohoku.ac.jp>
  4173. + **  patch04:  Don't crash if spooling fails <alden@zaphod.mps.ohio-state.edu>
  4174. + **  patch04:  Don't reuse socket in innd/cc.c <peter@dialix.oz.au>
  4175. + **  patch04:  Protect possible NULL return from RChostname (!?).
  4176. + **  patch04:  New NNTP connections to innd must clear any old WIP.
  4177. + **  patch04:  Add "p" item to newsfeeds "A" flag; document slave use.
  4178. + **  patch04:  rmgroups propagate like newgroups.
  4179. + **  patch04:  ctlinnd 'addhist' must open history if server not running.
  4180. + **  patch04:  innd clobbered memory on some reloads.
  4181. + **  patch04:  Copy SetDescriptorLimit into inndstart.
  4182. + **  patch04:  Make LIST case-insensitive in innd.
  4183. + **  patch04:  Add hosts.nntp.nolimit
  4184. + **  patch04:  Check PID file before innd starts up.
  4185. + **
  4186.   **  Revision 1.13  1993/01/29  16:51:16  rsalz
  4187. ***************
  4188. *** 284,287 ****
  4189.   #define RELEASE        "1"
  4190. ! #define PATCHLEVEL    "3"
  4191. ! #define DATE        "29-Jan-93"
  4192.   
  4193. --- 369,372 ----
  4194.   #define RELEASE        "1"
  4195. ! #define PATCHLEVEL    "4"
  4196. ! #define DATE        "20-Mar-93"
  4197.   
  4198.  
  4199.  
  4200. Index: include/paths.h
  4201. ===================================================================
  4202. RCS file: include/RCS/paths.h,v
  4203. retrieving revision 1.21
  4204. diff -c1 -r1.21 include/paths.h
  4205. *** 1.21    1993/01/29 16:51:18
  4206. --- include/paths.h    1993/03/18 21:04:18
  4207. ***************
  4208. *** 1,2 ****
  4209. ! /*  $Revision: 1.21 $
  4210.   **
  4211. --- 1,2 ----
  4212. ! /*  $Revision: 1.22 $
  4213.   **
  4214. ***************
  4215. *** 26,29 ****
  4216.   #define _PATH_COMPRESS    "/usr/ucb/compress"
  4217. -     /* =()<#define _PATH_INEWS    "@<_PATH_INEWS>@">()= */
  4218. - #define _PATH_INEWS    "/usr/local/bin/inews.nntp"
  4219.       /* =()<#define _PATH_RNEWS    "@<_PATH_RNEWS>@">()= */
  4220. --- 26,27 ----
  4221.  
  4222.  
  4223. Index: include/uio.h
  4224. ===================================================================
  4225. RCS file: include/RCS/uio.h,v
  4226. retrieving revision 1.1
  4227. diff -c1 -r1.1 include/uio.h
  4228. *** 1.1    1992/02/21 11:10:41
  4229. --- include/uio.h    1993/03/18 21:04:18
  4230. ***************
  4231. *** 1,2 ****
  4232. ! /*  $Revision: 1.1 $
  4233.   **
  4234. --- 1,2 ----
  4235. ! /*  $Revision: 1.2 $
  4236.   **
  4237. ***************
  4238. *** 7,10 ****
  4239.   struct iovec {
  4240. -     int        iov_len;
  4241.       char    *iov_base;
  4242.   };
  4243. --- 7,10 ----
  4244.   struct iovec {
  4245.       char    *iov_base;
  4246. +     int        iov_len;
  4247.   };
  4248.  
  4249.  
  4250. Index: innd/Makefile
  4251. ===================================================================
  4252. RCS file: innd/RCS/Makefile,v
  4253. retrieving revision 1.20
  4254. diff -c1 -r1.20 innd/Makefile
  4255. *** 1.20    1992/07/28 16:58:13
  4256. --- innd/Makefile    1993/03/18 21:04:19
  4257. ***************
  4258. *** 1,2 ****
  4259. ! ##  $Revision: 1.20 $
  4260.   SHELL    = /bin/sh
  4261. --- 1,2 ----
  4262. ! ##  $Revision: 1.21 $
  4263.   SHELL    = /bin/sh
  4264. ***************
  4265. *** 24,28 ****
  4266.   ##  =()<INND    = @<_PATH_INND>@>()=
  4267. ! INND    = /usr/local/etc/innd
  4268.   ##  =()<INNDSTART    = @<_PATH_INNDSTART>@>()=
  4269. ! INNDSTART    = /usr/local/etc/inndstart
  4270.   ## =()<OWNER    = -O @<NEWSUSER>@ -G @<NEWSGROUP>@>()=
  4271. --- 24,28 ----
  4272.   ##  =()<INND    = @<_PATH_INND>@>()=
  4273. ! INND    = /news/bin/innd
  4274.   ##  =()<INNDSTART    = @<_PATH_INNDSTART>@>()=
  4275. ! INNDSTART    = /news/bin/inndstart
  4276.   ## =()<OWNER    = -O @<NEWSUSER>@ -G @<NEWSGROUP>@>()=
  4277. ***************
  4278. *** 89,93 ****
  4279.   $(INND):    innd
  4280. !     sh ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  4281.   $(INNDSTART):    inndstart
  4282. !     sh ../installit.sh -m 0555 -b .OLD $? $@
  4283.   
  4284. --- 89,93 ----
  4285.   $(INND):    innd
  4286. !     $(SHELL) ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  4287.   $(INNDSTART):    inndstart
  4288. !     $(SHELL) ../installit.sh -m 0555 -b .OLD $? $@
  4289.   
  4290.  
  4291.  
  4292. Index: innd/art.c
  4293. ===================================================================
  4294. RCS file: innd/RCS/art.c,v
  4295. retrieving revision 1.51
  4296. diff -c1 -r1.51 innd/art.c
  4297. *** 1.51    1993/01/29 16:51:19
  4298. --- innd/art.c    1993/03/18 21:04:21
  4299. ***************
  4300. *** 1,2 ****
  4301. ! /*  $Revision: 1.51 $
  4302.   **
  4303. --- 1,2 ----
  4304. ! /*  $Revision: 1.52 $
  4305.   **
  4306. ***************
  4307. *** 60,61 ****
  4308. --- 60,62 ----
  4309.       int            Found;
  4310. +     BOOL        Allocated;
  4311.   } ARTHEADER;
  4312. ***************
  4313. *** 149,151 ****
  4314. --- 150,154 ----
  4315.       {    "References",        HTstd },
  4316. + #define _references        16
  4317.       {    "Xref",            HTobs },
  4318. + #define _xref            17
  4319.       {    "Date-Received",    HTobs },
  4320. ***************
  4321. *** 303,305 ****
  4322.       hp->Size = strlen(hp->Name);
  4323. !     if (hp->Value == NULL && hp->Type != HTobs)
  4324.           hp->Value = NEW(char, MAXHEADERSIZE + 1);
  4325. --- 306,310 ----
  4326.       hp->Size = strlen(hp->Name);
  4327. !     hp->Allocated = hp->Value == NULL && hp->Type != HTobs
  4328. !             && hp != &ARTheaders[_bytes];
  4329. !     if (hp->Allocated)
  4330.           hp->Value = NEW(char, MAXHEADERSIZE + 1);
  4331. ***************
  4332. *** 324,325 ****
  4333. --- 329,363 ----
  4334.   
  4335. + STATIC void
  4336. + ARTfreetree(tp)
  4337. +     TREE    *tp;
  4338. + {
  4339. +     TREE    *next;
  4340. +     for ( ; tp != NULL; tp = next) {
  4341. +     if (tp->Before)
  4342. +         ARTfreetree(tp->Before);
  4343. +     next = tp->After;
  4344. +     DISPOSE(tp);
  4345. +     }
  4346. + }
  4347. + void
  4348. + ARTclose()
  4349. + {
  4350. +     register ARTHEADER    *hp;
  4351. +     /* Free space in the header table. */
  4352. +     for (hp = ARTheaders; hp < ENDOF(ARTheaders); hp++)
  4353. +     if (hp->Allocated)
  4354. +         DISPOSE(hp->Value);
  4355. +     if (ARTfields != NULL) {
  4356. +     DISPOSE(ARTfields);
  4357. +     ARTfields = NULL;
  4358. +     }
  4359. +     ARTfreetree(ARTheadertree);
  4360. + }
  4361.   /*
  4362. ***************
  4363. *** 552,554 ****
  4364.       /* Install in header table; STRLEN("Lines: ") == 7. */
  4365. !     HDR(_lines) = Data->Lines + 7;
  4366.       ARTheaders[_lines].Length = i - 7;
  4367. --- 590,592 ----
  4368.       /* Install in header table; STRLEN("Lines: ") == 7. */
  4369. !     (void)strcpy(ARTheaders[_lines].Value, Data->Lines + 7);
  4370.       ARTheaders[_lines].Length = i - 7;
  4371. ***************
  4372. *** 558,559 ****
  4373. --- 596,602 ----
  4374.       if (CrossPosted) {
  4375. +     /* Install in header table; STRLEN("Xref: ") == 6. */
  4376. +     HDR(_xref) = Xref.Data + 6;
  4377. +     ARTheaders[_xref].Length = Xref.Used - 6;
  4378. +     ARTheaders[_xref].Found = 1;
  4379.       vp->iov_base = Xref.Data;
  4380. ***************
  4381. *** 855,857 ****
  4382.       for (hp = ARTheaders; hp < ENDOF(ARTheaders); hp++) {
  4383. !     if (hp->Value)
  4384.           *hp->Value = '\0';
  4385. --- 898,900 ----
  4386.       for (hp = ARTheaders; hp < ENDOF(ARTheaders); hp++) {
  4387. !     if (hp->Value && hp->Type != HTobs)
  4388.           *hp->Value = '\0';
  4389. ***************
  4390. *** 1336,1338 ****
  4391.   STATIC void
  4392. ! ARTsendnewgroup(name)
  4393.       register char    *name;
  4394. --- 1379,1381 ----
  4395.   STATIC void
  4396. ! ARTsendthegroup(name)
  4397.       register char    *name;
  4398. ***************
  4399. *** 1499,1501 ****
  4400.   
  4401. !     if (ListHas(hops, sp->Name)
  4402.        || (sp->Hops && hopcount > sp->Hops)
  4403. --- 1542,1544 ----
  4404.   
  4405. !     if ((!sp->IgnorePath && ListHas(hops, sp->Name))
  4406.        || (sp->Hops && hopcount > sp->Hops)
  4407. ***************
  4408. *** 1635,1637 ****
  4409.       BOOL        Accepted;
  4410. !     BOOL        IsNewgroup;
  4411.       BOOL        CrossPosted;
  4412. --- 1678,1680 ----
  4413.       BOOL        Accepted;
  4414. !     BOOL        LikeNewgroup;
  4415.       BOOL        CrossPosted;
  4416. ***************
  4417. *** 1664,1665 ****
  4418. --- 1707,1710 ----
  4419.       Data.Feedsite = RChostname(cp);
  4420. +     if (Data.Feedsite == NULL)
  4421. +     Data.Feedsite = CHANname(cp);
  4422.   #else
  4423. ***************
  4424. *** 1741,1743 ****
  4425.       ControlHeader = -1;
  4426. !     IsNewgroup = FALSE;
  4427.       }
  4428. --- 1786,1788 ----
  4429.       ControlHeader = -1;
  4430. !     LikeNewgroup = FALSE;
  4431.       }
  4432. ***************
  4433. *** 1751,1753 ****
  4434.       *p = '\0';
  4435. !     IsNewgroup = EQ(ControlWord, "newgroup");
  4436.   
  4437. --- 1796,1799 ----
  4438.       *p = '\0';
  4439. !     LikeNewgroup = EQ(ControlWord, "newgroup")
  4440. !             || EQ(ControlWord, "rmgroup");
  4441.   
  4442. ***************
  4443. *** 1778,1785 ****
  4444.           GroupMissing = TRUE;
  4445. !         if (IsNewgroup && Approved) {
  4446. !         /* Newgroup being sent to a group that doesn't exist.
  4447. !          * Assume it is being sent to the group being created,
  4448. !          * and send the group to all sites that would get the
  4449. !          * group if it were created. */
  4450. !         ARTsendnewgroup(*groups);
  4451.           Accepted = TRUE;
  4452. --- 1824,1831 ----
  4453.           GroupMissing = TRUE;
  4454. !         if (LikeNewgroup && Approved) {
  4455. !         /* Newgroup/rmgroup being sent to a group that doesn't
  4456. !          * exist.  Assume it is being sent to the group being
  4457. !          * created or removed, nd send the group to all sites that
  4458. !          * would or would have had the group if it were created. */
  4459. !         ARTsendthegroup(*groups);
  4460.           Accepted = TRUE;
  4461. ***************
  4462. *** 1874,1876 ****
  4463.           return buff;
  4464. ! #endif    /* defined(DONT_WANT_TRASH) */
  4465.           /* if !GroupMissing, then all the groups the article was posted
  4466. --- 1920,1922 ----
  4467.           return buff;
  4468. ! #else
  4469.           /* if !GroupMissing, then all the groups the article was posted
  4470. ***************
  4471. *** 1886,1887 ****
  4472. --- 1932,1934 ----
  4473.           }
  4474. + #endif    /* defined(DONT_WANT_TRASH) */
  4475.       }
  4476.  
  4477.  
  4478. Index: innd/cc.c
  4479. ===================================================================
  4480. RCS file: innd/RCS/cc.c,v
  4481. retrieving revision 1.40
  4482. diff -c1 -r1.40 innd/cc.c
  4483. *** 1.40    1993/01/29 18:47:18
  4484. --- innd/cc.c    1993/03/18 21:04:22
  4485. ***************
  4486. *** 1,2 ****
  4487. ! /*  $Revision: 1.40 $
  4488.   **
  4489. --- 1,2 ----
  4490. ! /*  $Revision: 1.41 $
  4491.   **
  4492. ***************
  4493. *** 68,69 ****
  4494. --- 68,70 ----
  4495.   STATIC CHANNEL        *CCchan;
  4496. + STATIC int        CCwriter;
  4497.   STATIC CCDISPATCH    CCcommands[] = {
  4498. ***************
  4499. *** 183,184 ****
  4500. --- 184,186 ----
  4501.       STRING        p;
  4502. +     BOOL        ok;
  4503.   
  4504. ***************
  4505. *** 187,188 ****
  4506. --- 189,192 ----
  4507.       return p;
  4508. +     if (HIShavearticle(Data.MessageID))
  4509. +     return "1 Duplicate";
  4510.       if (strspn(av[1], DIGITS) != strlen(av[1]))
  4511. ***************
  4512. *** 197,199 ****
  4513.   
  4514. !     return !HISwrite(&Data, av[4]) ? "1 Write failed" : NULL;
  4515.   }
  4516. --- 201,211 ----
  4517.   
  4518. !     if (Mode == OMrunning)
  4519. !     ok = HISwrite(&Data, av[4]);
  4520. !     else {
  4521. !     /* Possible race condition, but documented in ctlinnd manpage. */
  4522. !     HISsetup();
  4523. !     ok = HISwrite(&Data, av[4]);
  4524. !     HISclose();
  4525. !     }
  4526. !     return ok ? NULL : "1 Write failed";
  4527.   }
  4528. ***************
  4529. *** 213,215 ****
  4530.       p = av[0];
  4531. !     if (*p && !EQ(p, ModeReason))
  4532.       return "1 Wrong reason";
  4533. --- 225,227 ----
  4534.       p = av[0];
  4535. !     if (*p && !EQ(p, RejectReason))
  4536.       return "1 Wrong reason";
  4537. ***************
  4538. *** 600,604 ****
  4539.       *p++ = '\n';
  4540. !     if (ModeReason) {
  4541.       p += strlen(strcpy(p, "Rejecting "));
  4542. !     p += strlen(strcpy(p, ModeReason));
  4543.       }
  4544. --- 612,616 ----
  4545.       *p++ = '\n';
  4546. !     if (RejectReason) {
  4547.       p += strlen(strcpy(p, "Rejecting "));
  4548. !     p += strlen(strcpy(p, RejectReason));
  4549.       }
  4550. ***************
  4551. *** 663,664 ****
  4552. --- 675,677 ----
  4553.       register char    *p;
  4554. +     register int    count;
  4555.       int            i;
  4556. ***************
  4557. *** 673,675 ****
  4558.       BUFFset(&CCreply, "0 ", 2);
  4559. !     for (i = 0; (cp = CHANiter(&i, CTany)) != NULL; ) {
  4560.       if (cp->Type == CTfree)
  4561. --- 686,688 ----
  4562.       BUFFset(&CCreply, "0 ", 2);
  4563. !     for (count = 0, i = 0; (cp = CHANiter(&i, CTany)) != NULL; ) {
  4564.       if (cp->Type == CTfree)
  4565. ***************
  4566. *** 676,677 ****
  4567. --- 689,692 ----
  4568.           continue;
  4569. +     if (++count > 1)
  4570. +         BUFFappend(&CCreply, NL, 1);
  4571.       p = CHANname(cp);
  4572. ***************
  4573. *** 678,680 ****
  4574.       BUFFappend(&CCreply, p, strlen(p));
  4575. -     BUFFappend(&CCreply, NL, 1);
  4576.       }
  4577. --- 693,694 ----
  4578. ***************
  4579. *** 700,702 ****
  4580.       STRING        who;
  4581. -     int            mask;
  4582.       char        buff[SMBUF];
  4583. --- 714,715 ----
  4584. ***************
  4585. *** 725,727 ****
  4586.        * 4.1 has broken libc which can't handle fd's greater than 127. */
  4587. -     mask = umask(0);
  4588.       if ((fd = open(TIMES, O_WRONLY | O_APPEND | O_CREAT, 0664)) < 0) {
  4589. --- 738,739 ----
  4590. ***************
  4591. *** 746,748 ****
  4592.       }
  4593. -     (void)umask(mask);
  4594.   
  4595. --- 758,759 ----
  4596. ***************
  4597. *** 992,994 ****
  4598.       return "1 Already rejecting";
  4599. !     RejectReason = COPY(av[1]);
  4600.       return NULL;
  4601. --- 1003,1005 ----
  4602.       return "1 Already rejecting";
  4603. !     RejectReason = COPY(av[0]);
  4604.       return NULL;
  4605. ***************
  4606. *** 1373,1375 ****
  4607.       (void)strcpy(client.sun_path, argv[0]);
  4608. !     if (sendto(CCchan->fd, p, len, 0,
  4609.           (struct sockaddr *)&client, AF_UNIX_SOCKSIZE(client)) < 0) {
  4610. --- 1384,1386 ----
  4611.       (void)strcpy(client.sun_path, argv[0]);
  4612. !     if (sendto(CCwriter, p, len, 0,
  4613.           (struct sockaddr *)&client, AF_UNIX_SOCKSIZE(client)) < 0) {
  4614. ***************
  4615. *** 1379,1381 ****
  4616.       if (i == EMSGSIZE)
  4617. !         (void)sendto(CCchan->fd, TOOLONG, STRLEN(TOOLONG), 0,
  4618.           (struct sockaddr *)&client, AF_UNIX_SOCKSIZE(client));
  4619. --- 1390,1392 ----
  4620.       if (i == EMSGSIZE)
  4621. !         (void)sendto(CCwriter, TOOLONG, STRLEN(TOOLONG), 0,
  4622.           (struct sockaddr *)&client, AF_UNIX_SOCKSIZE(client));
  4623. ***************
  4624. *** 1438,1439 ****
  4625. --- 1449,1456 ----
  4626.       }
  4627. +     /* Create an unbound socket to reply on. */
  4628. +     if ((CCwriter = socket(AF_UNIX, SOCK_DGRAM, 0)) < 0) {
  4629. +     syslog(L_FATAL, "%s cant socket unbound %m", LogName);
  4630. +     exit(1);
  4631. +     }
  4632.   #else
  4633. ***************
  4634. *** 1469,1470 ****
  4635. --- 1486,1491 ----
  4636.       syslog(L_ERROR, "%s cant unlink %s %m", LogName, CCpath);
  4637. + #if    defined(DO_HAVE_UNIX_DOMAIN)
  4638. +     if (close(CCwriter) < 0)
  4639. +     syslog(L_ERROR, "%s cant close unbound %m", LogName);
  4640. + #endif    /* defined(DO_HAVE_UNIX_DOMAIN) */
  4641.   }
  4642.  
  4643.  
  4644. Index: innd/chan.c
  4645. ===================================================================
  4646. RCS file: innd/RCS/chan.c,v
  4647. retrieving revision 1.29
  4648. diff -c1 -r1.29 innd/chan.c
  4649. *** 1.29    1993/01/29 16:51:22
  4650. --- innd/chan.c    1993/03/18 21:04:23
  4651. ***************
  4652. *** 1,2 ****
  4653. ! /*  $Revision: 1.29 $
  4654.   **
  4655. --- 1,2 ----
  4656. ! /*  $Revision: 1.30 $
  4657.   **
  4658. ***************
  4659. *** 65,66 ****
  4660. --- 65,69 ----
  4661.       CHANtablesize = i;
  4662. +     CHANtable = NEW(CHANNEL, CHANtablesize);
  4663. +     (void)memset((POINTER)CHANtable, 0,
  4664. +         (SIZE_T)(CHANtablesize * sizeof *CHANtable));
  4665.       CHANnull.NextLog = CHANNEL_INACTIVE_TIME;
  4666. ***************
  4667. *** 67,69 ****
  4668.       CHANnull.Address.s_addr = MyAddress.s_addr;
  4669. !     for (cp = CHANtable = NEW(CHANNEL, CHANtablesize); --i >= 0; cp++)
  4670.       *cp = CHANnull;
  4671. --- 70,72 ----
  4672.       CHANnull.Address.s_addr = MyAddress.s_addr;
  4673. !     for (cp = CHANtable; --i >= 0; cp++)
  4674.       *cp = CHANnull;
  4675.  
  4676.  
  4677. Index: innd/innd.c
  4678. ===================================================================
  4679. RCS file: innd/RCS/innd.c,v
  4680. retrieving revision 1.38
  4681. diff -c1 -r1.38 innd/innd.c
  4682. *** 1.38    1993/01/29 16:51:26
  4683. --- innd/innd.c    1993/03/18 21:04:25
  4684. ***************
  4685. *** 1,2 ****
  4686. ! /*  $Revision: 1.38 $
  4687.   **
  4688. --- 1,2 ----
  4689. ! /*  $Revision: 1.39 $
  4690.   **
  4691. ***************
  4692. *** 290,294 ****
  4693.       /* Try to set our permissions. */
  4694. ! #if    defined(INND_NICE_KIDS)
  4695.       (void)nice(INND_NICE_VALUE);
  4696. ! #endif    /* defined(INND_NICE_KIDS) */
  4697.       if (setgid(NewsGID) == -1)
  4698. --- 290,294 ----
  4699.       /* Try to set our permissions. */
  4700. ! #if    defined(DO_INND_NICE_KIDS)
  4701.       (void)nice(INND_NICE_VALUE);
  4702. ! #endif    /* defined(DO_INND_NICE_KIDS) */
  4703.       if (setgid(NewsGID) == -1)
  4704. ***************
  4705. *** 487,488 ****
  4706. --- 487,489 ----
  4707.       HISclose();
  4708. +     ARTclose();
  4709.       (void)sleep(1);
  4710. ***************
  4711. *** 748,750 ****
  4712.       /* Set up our permissions. */
  4713. !     (void)umask(0);
  4714.       if (!GetNewsOwnerships()) {
  4715. --- 749,751 ----
  4716.       /* Set up our permissions. */
  4717. !     (void)umask(NEWSUMASK);
  4718.       if (!GetNewsOwnerships()) {
  4719. ***************
  4720. *** 783,785 ****
  4721.   #if    defined(DO_HAVE_SETSID)
  4722. !         setsid();
  4723.   #endif    /* defined(DO_HAVE_SETSID) */
  4724. --- 784,786 ----
  4725.   #if    defined(DO_HAVE_SETSID)
  4726. !         (void)setsid();
  4727.   #endif    /* defined(DO_HAVE_SETSID) */
  4728. ***************
  4729. *** 812,814 ****
  4730.   #if    NOFILE_LIMIT > 0
  4731. !     SetDescriptorLimit(NOFILE_LIMIT);
  4732.   #endif    /* NOFILE_LIMIT > 0 */
  4733. --- 813,816 ----
  4734.   #if    NOFILE_LIMIT > 0
  4735. !     if (AmRoot)
  4736. !     SetDescriptorLimit(NOFILE_LIMIT);
  4737.   #endif    /* NOFILE_LIMIT > 0 */
  4738. ***************
  4739. *** 822,824 ****
  4740.       /* getfdcount() - (stdio + dbz + cc + lc + rc + art + fudge) */
  4741. !     MaxOutgoing = i - (  3   +  3  +  1 +  1 +  1 +  1  +   2  );
  4742.       syslog(L_NOTICE, "%s outgoing %d", LogName, MaxOutgoing);
  4743. --- 824,826 ----
  4744.       /* getfdcount() - (stdio + dbz + cc + lc + rc + art + fudge) */
  4745. !     MaxOutgoing = i - (  3   +  3  +  2 +  1 +  1 +  1  +   2  );
  4746.       syslog(L_NOTICE, "%s outgoing %d", LogName, MaxOutgoing);
  4747. ***************
  4748. *** 826,827 ****
  4749. --- 828,840 ----
  4750.   
  4751. +     /* See if another instance is alive. */
  4752. +     if ((F = fopen(PID, "r")) != NULL) {
  4753. +     if (fgets(buff, sizeof buff, F) != NULL
  4754. +      && ((pid = atoi(buff)) > 0)
  4755. +      && (kill((PID_T)pid, 0) > 0 || errno != ESRCH)) {
  4756. +         (void)syslog(L_FATAL, "%s already_running pid %d", LogName, pid);
  4757. +         exit(1);
  4758. +     }
  4759. +     (void)fclose(F);
  4760. +     }
  4761.       /* Set up the various parts of the system.  Channel feeds start
  4762. ***************
  4763. *** 850,855 ****
  4764.       pid = getpid();
  4765. -     if ((F = fopen(PID, "r")) != NULL) {
  4766. -     syslog(L_ERROR, "%s exists %s", LogName, PID);
  4767. -     (void)fclose(F);
  4768. -     }
  4769.       if ((F = fopen(PID, "w")) == NULL) {
  4770. --- 863,864 ----
  4771.  
  4772.  
  4773. Index: innd/innd.h
  4774. ===================================================================
  4775. RCS file: innd/RCS/innd.h,v
  4776. retrieving revision 1.40
  4777. diff -c1 -r1.40 innd/innd.h
  4778. *** 1.40    1993/01/29 16:51:27
  4779. --- innd/innd.h    1993/03/18 21:04:26
  4780. ***************
  4781. *** 1,2 ****
  4782. ! /*  $Revision: 1.40 $
  4783.   **
  4784. --- 1,2 ----
  4785. ! /*  $Revision: 1.41 $
  4786.   **
  4787. ***************
  4788. *** 203,204 ****
  4789. --- 203,205 ----
  4790.       BOOL        DistRequired;
  4791. +     BOOL        IgnorePath;
  4792.       int            Hops;
  4793. ***************
  4794. *** 425,426 ****
  4795. --- 426,428 ----
  4796.   extern void        ARTcancel();
  4797. + extern void        ARTclose();
  4798.   extern void        ARTsetup();
  4799. ***************
  4800. *** 496,497 ****
  4801. --- 498,500 ----
  4802.   
  4803. + extern BOOL        RCnolimit();
  4804.   extern BOOL        RCauthorized();
  4805.  
  4806.  
  4807. Index: innd/inndstart.c
  4808. ===================================================================
  4809. RCS file: innd/RCS/inndstart.c,v
  4810. retrieving revision 1.9
  4811. diff -c1 -r1.9 innd/inndstart.c
  4812. *** 1.9    1993/01/29 16:51:28
  4813. --- innd/inndstart.c    1993/03/18 21:04:26
  4814. ***************
  4815. *** 1,2 ****
  4816. ! /*  $Revision: 1.9 $
  4817.   **
  4818. --- 1,2 ----
  4819. ! /*  $Revision: 1.10 $
  4820.   **
  4821. ***************
  4822. *** 16,17 ****
  4823. --- 16,24 ----
  4824.   #include "macros.h"
  4825. + #if    NOFILE_LIMIT > 0
  4826. + #if    defined(DO_NEED_TIME)
  4827. + #include <time.h>
  4828. + #endif    /* defined(DO_NEED_TIME) */
  4829. + #include <sys/time.h>
  4830. + #include <sys/resource.h>
  4831. + #endif    /* NOFILE_LIMIT > 0 */
  4832.   
  4833. ***************
  4834. *** 19,20 ****
  4835. --- 26,52 ----
  4836.   
  4837. + #if    NOFILE_LIMIT > 0
  4838. + /*
  4839. + **  Set the limit on the number of open files we can have.  I don't
  4840. + **  like having to do this.
  4841. + */
  4842. + STATIC void
  4843. + SetDescriptorLimit(i)
  4844. +     int            i;
  4845. + {
  4846. +     struct rlimit    rl;
  4847. +     if (getrlimit(RLIMIT_NOFILE, &rl) < 0) {
  4848. +     syslog(L_ERROR, "inndstart cant getrlimit(NOFILE) %m");
  4849. +     return;
  4850. +     }
  4851. +     rl.rlim_cur = i;
  4852. +     if (setrlimit(RLIMIT_NOFILE, &rl) < 0) {
  4853. +     syslog(L_ERROR, "inndstart cant setrlimit(NOFILE) %d %m", i);
  4854. +     return;
  4855. +     }
  4856. + }
  4857. + #endif    /* NOFILE_LIMIT > 0 */
  4858.   int
  4859. ***************
  4860. *** 49,50 ****
  4861. --- 81,86 ----
  4862.       NewsGID = Sb.st_gid;
  4863. + #if    NOFILE_LIMIT > 0
  4864. +     SetDescriptorLimit(NOFILE_LIMIT);
  4865. + #endif    /* NOFILE_LIMIT > 0 */
  4866.   
  4867.  
  4868.  
  4869. Index: innd/nc.c
  4870. ===================================================================
  4871. RCS file: innd/RCS/nc.c,v
  4872. retrieving revision 1.34
  4873. diff -c1 -r1.34 innd/nc.c
  4874. *** 1.34    1993/01/29 16:51:29
  4875. --- innd/nc.c    1993/03/18 21:04:28
  4876. ***************
  4877. *** 1,2 ****
  4878. ! /*  $Revision: 1.34 $
  4879.   **
  4880. --- 1,2 ----
  4881. ! /*  $Revision: 1.35 $
  4882.   **
  4883. ***************
  4884. *** 10,12 ****
  4885.   #define BAD_COMMAND_COUNT    10
  4886. ! #define WIP_CHECK        (5 * 60)
  4887.   #define SAVE_AMT        10
  4888. --- 10,12 ----
  4889.   #define BAD_COMMAND_COUNT    10
  4890. ! #define WIP_CHECK        (1 * 60)
  4891.   #define SAVE_AMT        10
  4892. ***************
  4893. *** 59,60 ****
  4894. --- 59,61 ----
  4895.   STATIC WIP        *NCwip;        /* Work-in-progress        */
  4896. + STATIC WIP        NCnullwip;
  4897.   STATIC NCDISPATCH    NCcommands[] = {
  4898. ***************
  4899. *** 560,562 ****
  4900.       continue;
  4901. !     if (*p == 'n' && EQ(p, "newsgroups")) {
  4902.       trash = p = ReadInFile(_PATH_NEWSGROUPS, (struct stat *)NULL);
  4903. --- 561,563 ----
  4904.       continue;
  4905. !     if (caseEQ(p, "newsgroups")) {
  4906.       trash = p = ReadInFile(_PATH_NEWSGROUPS, (struct stat *)NULL);
  4907. ***************
  4908. *** 564,566 ****
  4909.       }
  4910. !     else if (*p == 'a' && EQ(p, "active.times")) {
  4911.       trash = p = ReadInFile(_PATH_ACTIVETIMES, (struct stat *)NULL);
  4912. --- 565,567 ----
  4913.       }
  4914. !     else if (caseEQ(p, "active.times")) {
  4915.       trash = p = ReadInFile(_PATH_ACTIVETIMES, (struct stat *)NULL);
  4916. ***************
  4917. *** 568,570 ****
  4918.       }
  4919. !     else if (*p == '\0' || (*p == 'a' && EQ(p, "active"))) {
  4920.       p = ICDreadactive(&end);
  4921. --- 569,571 ----
  4922.       }
  4923. !     else if (*p == '\0' || (caseEQ(p, "active"))) {
  4924.       p = ICDreadactive(&end);
  4925. ***************
  4926. *** 967,972 ****
  4927.       /* Set up the work-in-progress structure. */
  4928. !     for (wp = NCwip = NEW(WIP, i), NCwipsize = i; --i >= 0; wp++) {
  4929. !     wp->MessageID = NULL;
  4930. !     wp->Replic.Data = NULL;
  4931. !     }
  4932.   
  4933. --- 968,971 ----
  4934.       /* Set up the work-in-progress structure. */
  4935. !     for (wp = NCwip = NEW(WIP, i), NCwipsize = i; --i >= 0; wp++)
  4936. !     *wp = NCnullwip;
  4937.   
  4938. ***************
  4939. *** 1024,1025 ****
  4940. --- 1023,1025 ----
  4941.           NCreader, NCwritedone);
  4942. +     NCclearwip(&NCwip[cp->fd]);
  4943.   #if    defined(SOL_SOCKET) && defined(SO_SNDBUF) && defined(SO_RCVBUF)
  4944. ***************
  4945. *** 1044,1046 ****
  4946.       /* See if we have too many channels. */
  4947. !     if (MaxIncoming && NCcount >= MaxIncoming) {
  4948.       /* Recount, just in case we got out of sync. */
  4949. --- 1044,1046 ----
  4950.       /* See if we have too many channels. */
  4951. !     if (MaxIncoming && NCcount >= MaxIncoming && !RCnolimit(cp)) {
  4952.       /* Recount, just in case we got out of sync. */
  4953.  
  4954.  
  4955. Index: innd/newsfeeds.c
  4956. ===================================================================
  4957. RCS file: innd/RCS/newsfeeds.c,v
  4958. retrieving revision 1.30
  4959. diff -c1 -r1.30 innd/newsfeeds.c
  4960. *** 1.30    1993/01/29 16:51:30
  4961. --- innd/newsfeeds.c    1993/03/18 21:04:29
  4962. ***************
  4963. *** 1,2 ****
  4964. ! /*  $Revision: 1.30 $
  4965.   **
  4966. --- 1,2 ----
  4967. ! /*  $Revision: 1.31 $
  4968.   **
  4969. ***************
  4970. *** 233,234 ****
  4971. --- 233,235 ----
  4972.           case 'd': sp->DistRequired = TRUE;    break;
  4973. +         case 'p': sp->IgnorePath = TRUE;    break;
  4974.           }
  4975. ***************
  4976. *** 383,388 ****
  4977.               ngp->Sites[j] = isp;
  4978. !             /* Note the continue! */
  4979. !             continue;
  4980. !         }
  4981. !         ngp->Sites[ngp->nSites++] = isp;
  4982.           }
  4983. --- 384,389 ----
  4984.               ngp->Sites[j] = isp;
  4985. !             break;
  4986. !             }
  4987. !         if (j == ngp->nSites)
  4988. !             ngp->Sites[ngp->nSites++] = isp;
  4989.           }
  4990. ***************
  4991. *** 434,435 ****
  4992. --- 435,437 ----
  4993.           result = FALSE;
  4994. +         continue;
  4995.       }
  4996. ***************
  4997. *** 439,440 ****
  4998. --- 441,443 ----
  4999.           result = FALSE;
  5000. +         continue;
  5001.       }
  5002. ***************
  5003. *** 444,445 ****
  5004. --- 447,449 ----
  5005.           result = FALSE;
  5006. +         continue;
  5007.       }
  5008. ***************
  5009. *** 482,483 ****
  5010. --- 486,488 ----
  5011.       DISPOSE(Sites);
  5012. +     SITEfree(&ME);
  5013.       }
  5014.  
  5015.  
  5016. Index: innd/ng.c
  5017. ===================================================================
  5018. RCS file: innd/RCS/ng.c,v
  5019. retrieving revision 1.18
  5020. diff -c1 -r1.18 innd/ng.c
  5021. *** 1.18    1993/01/29 16:51:32
  5022. --- innd/ng.c    1993/03/18 21:04:30
  5023. ***************
  5024. *** 1,2 ****
  5025. ! /*  $Revision: 1.18 $
  5026.   **
  5027. --- 1,2 ----
  5028. ! /*  $Revision: 1.19 $
  5029.   **
  5030. ***************
  5031. *** 180,182 ****
  5032.        * element, but it is definitely easier on the system. */
  5033. !     i = strlen(active);
  5034.       NGdirs.Size = i;
  5035. --- 180,182 ----
  5036.        * element, but it is definitely easier on the system. */
  5037. !     i = end - active;
  5038.       NGdirs.Size = i;
  5039.  
  5040.  
  5041. Index: innd/rc.c
  5042. ===================================================================
  5043. RCS file: innd/RCS/rc.c,v
  5044. retrieving revision 1.30
  5045. diff -c1 -r1.30 innd/rc.c
  5046. *** 1.30    1993/01/29 16:51:34
  5047. --- innd/rc.c    1993/03/18 21:04:31
  5048. ***************
  5049. *** 1,2 ****
  5050. ! /*  $Revision: 1.30 $
  5051.   **
  5052. --- 1,2 ----
  5053. ! /*  $Revision: 1.31 $
  5054.   **
  5055. ***************
  5056. *** 38,40 ****
  5057.   STATIC char        RCnntpd[] = _PATH_NNTPD;
  5058. - STATIC char        RChostpath[] = _PATH_INNDHOSTS;
  5059.   STATIC CHANNEL        *RCchan;
  5060. --- 38,39 ----
  5061. ***************
  5062. *** 42,43 ****
  5063. --- 41,44 ----
  5064.   STATIC int        RCnpeerlist;
  5065. + STATIC REMOTEHOST    *RCnolimitlist;
  5066. + STATIC int        RCnnolimitlist;
  5067.   
  5068. ***************
  5069. *** 74,75 ****
  5070. --- 75,94 ----
  5071.   /*
  5072. + **  See if a host is in the "nolimit" file.
  5073. + */
  5074. + BOOL
  5075. + RCnolimit(cp)
  5076. +     register CHANNEL    *cp;
  5077. + {
  5078. +     register REMOTEHOST    *rp;
  5079. +     register int    i;
  5080. +     for (rp = RCnolimitlist, i = RCnnolimitlist; --i >= 0; rp++)
  5081. +     /* SUPPRESS 112 *//* Retrieving long where char is stored */
  5082. +     if (cp->Address.s_addr == rp->Address.s_addr)
  5083. +         return TRUE;
  5084. +     return FALSE;
  5085. + }
  5086. + /*
  5087.   **  Is this an address of the master?
  5088. ***************
  5089. *** 206,209 ****
  5090.   */
  5091. ! void
  5092. ! RCreadlist()
  5093.   {
  5094. --- 225,231 ----
  5095.   */
  5096. ! STATIC void
  5097. ! RCreadfile(list, count, filename)
  5098. !     REMOTEHOST        **list;
  5099. !     int            *count;
  5100. !     char        *filename;
  5101.   {
  5102. ***************
  5103. *** 222,225 ****
  5104.       /* Free anything that might have been there. */
  5105. !     if (RCpeerlist) {
  5106. !     for (rp = RCpeerlist, i = RCnpeerlist; --i >= 0; rp++) {
  5107.           DISPOSE(rp->Name);
  5108. --- 244,247 ----
  5109.       /* Free anything that might have been there. */
  5110. !     if (*list) {
  5111. !     for (rp = *list, i = *count; --i >= 0; rp++) {
  5112.           DISPOSE(rp->Name);
  5113. ***************
  5114. *** 226,232 ****
  5115.           DISPOSE(rp->Password);
  5116. !         DISPOSE(rp->Patterns);
  5117.       }
  5118. !     DISPOSE(RCpeerlist);
  5119. !     RCpeerlist = NULL;
  5120. !     RCnpeerlist = 0;
  5121.       }
  5122. --- 248,255 ----
  5123.           DISPOSE(rp->Password);
  5124. !         if (rp->Patterns)
  5125. !         DISPOSE(rp->Patterns);
  5126.       }
  5127. !     DISPOSE(*list);
  5128. !     *list = NULL;
  5129. !     *count = 0;
  5130.       }
  5131. ***************
  5132. *** 234,237 ****
  5133.       /* Open the server file, count the lines. */
  5134. !     if ((F = fopen(RChostpath, "r")) == NULL) {
  5135. !     syslog(L_FATAL, "%s cant read %s %m", LogName, RChostpath);
  5136.       exit(1);
  5137. --- 257,260 ----
  5138.       /* Open the server file, count the lines. */
  5139. !     if ((F = fopen(filename, "r")) == NULL) {
  5140. !     syslog(L_FATAL, "%s cant read %s %m", LogName, filename);
  5141.       exit(1);
  5142. ***************
  5143. *** 238,240 ****
  5144.       }
  5145. !     for (i = 0; fgets(buff, sizeof buff, F) != NULL; )
  5146.       if (buff[0] != COMMENT_CHAR && buff[0] != '\n')
  5147. --- 261,263 ----
  5148.       }
  5149. !     for (i = 1; fgets(buff, sizeof buff, F) != NULL; )
  5150.       if (buff[0] != COMMENT_CHAR && buff[0] != '\n')
  5151. ***************
  5152. *** 241,248 ****
  5153.           i++;
  5154.   #if    !defined(DO_HAVE_UNIX_DOMAIN)
  5155. -     i++;
  5156. - #endif    /* !defined(DO_HAVE_UNIX_DOMAIN) */
  5157. -     RCnpeerlist = i;
  5158. -     rp = RCpeerlist = NEW(REMOTEHOST, RCnpeerlist);
  5159. - #if    !defined(DO_HAVE_UNIX_DOMAIN)
  5160.       rp->Address.s_addr = inet_addr(LOOPBACK_HOST);
  5161. --- 264,268 ----
  5162.           i++;
  5163. +     *count = i;
  5164. +     rp = *list = NEW(REMOTEHOST, *count);
  5165.   #if    !defined(DO_HAVE_UNIX_DOMAIN)
  5166.       rp->Address.s_addr = inet_addr(LOOPBACK_HOST);
  5167. ***************
  5168. *** 312,317 ****
  5169.       /* Note the relative position, grow the array, and restore it. */
  5170. !     j = rp - RCpeerlist;
  5171. !     RCnpeerlist += i - 1;
  5172. !     RENEW(RCpeerlist, REMOTEHOST, RCnpeerlist);
  5173. !     rp = &RCpeerlist[j];
  5174.   
  5175. --- 332,337 ----
  5176.       /* Note the relative position, grow the array, and restore it. */
  5177. !     j = rp - *list;
  5178. !     *count += i - 1;
  5179. !     RENEW(*list, REMOTEHOST, *count);
  5180. !     rp = *list + j;
  5181.   
  5182. ***************
  5183. *** 334,335 ****
  5184. --- 354,356 ----
  5185.       }
  5186. +     *count = rp - *list;
  5187.   
  5188. ***************
  5189. *** 336,338 ****
  5190.       if (fclose(F) == EOF)
  5191. !     syslog(L_ERROR, "%s cant fclose %s %m", LogName, RChostpath);
  5192.   
  5193. --- 357,359 ----
  5194.       if (fclose(F) == EOF)
  5195. !     syslog(L_ERROR, "%s cant fclose %s %m", LogName, filename);
  5196.   
  5197. ***************
  5198. *** 339,341 ****
  5199.       if (errors)
  5200. !     syslog(L_ERROR, "%s bad_hosts %d in %s", LogName, errors, RChostpath);
  5201.   }
  5202. --- 360,376 ----
  5203.       if (errors)
  5204. !     syslog(L_ERROR, "%s bad_hosts %d in %s", LogName, errors, filename);
  5205. ! }
  5206. ! void
  5207. ! RCreadlist()
  5208. ! {
  5209. !     static char    INNDHOSTS[] = _PATH_INNDHOSTS;
  5210. !     char    name[sizeof _PATH_INNDHOSTS + sizeof ".nolimit"];
  5211. !     struct stat    Sb;
  5212. !     RCreadfile(&RCpeerlist, &RCnpeerlist, INNDHOSTS);
  5213. !     FileGlue(name, INNDHOSTS, '.', "nolimit");
  5214. !     if (stat(name, &Sb) >= 0)
  5215. !     RCreadfile(&RCnolimitlist, &RCnnolimitlist, name);
  5216.   }
  5217. ***************
  5218. *** 343,344 ****
  5219. --- 378,380 ----
  5220.   
  5221.   /*
  5222. ***************
  5223. *** 503,505 ****
  5224.           DISPOSE(rp->Password);
  5225. !         DISPOSE(rp->Patterns);
  5226.       }
  5227. --- 539,542 ----
  5228.           DISPOSE(rp->Password);
  5229. !         if (rp->Patterns)
  5230. !         DISPOSE(rp->Patterns);
  5231.       }
  5232.  
  5233.  
  5234. Index: innd/site.c
  5235. ===================================================================
  5236. RCS file: innd/RCS/site.c,v
  5237. retrieving revision 1.33
  5238. diff -c1 -r1.33 innd/site.c
  5239. *** 1.33    1993/01/29 16:51:36
  5240. --- innd/site.c    1993/03/18 21:04:32
  5241. ***************
  5242. *** 1,2 ****
  5243. ! /*  $Revision: 1.33 $
  5244.   **
  5245. --- 1,2 ----
  5246. ! /*  $Revision: 1.34 $
  5247.   **
  5248. ***************
  5249. *** 26,28 ****
  5250.       else
  5251. !     
  5252.   STATIC int    SITEcount;
  5253. --- 26,28 ----
  5254.       else
  5255.   STATIC int    SITEcount;
  5256. ***************
  5257. *** 241,243 ****
  5258.   
  5259. !     bp = sp->Buffered ? &sp->Buffer : &sp->Channel->Out;
  5260.       for (Dirty = FALSE, p = sp->FileFlags; *p; p++) {
  5261. --- 241,252 ----
  5262.   
  5263. !     if (sp->Buffered)
  5264. !     bp = &sp->Buffer;
  5265. !     else {
  5266. !     /* This should not happen, but if we tried to spool and failed,
  5267. !      * e.g., because of a bad F param for this site, we can get
  5268. !      * into this state.  We already logged a message so give up. */
  5269. !     if (sp->Channel == NULL)
  5270. !         return;
  5271. !     bp = &sp->Channel->Out;
  5272. !     }
  5273.       for (Dirty = FALSE, p = sp->FileFlags; *p; p++) {
  5274. ***************
  5275. *** 655,657 ****
  5276.       register CHANNEL    *cp;
  5277. !     register BOOL    lost;
  5278.   
  5279. --- 664,669 ----
  5280.       register CHANNEL    *cp;
  5281. !     register BUFFER    *out;
  5282. !     if (sp->Name == NULL)
  5283. !     return;
  5284.   
  5285. ***************
  5286. *** 686,688 ****
  5287.       (void)WCHANflush(cp);
  5288. -     sp->Channel = NULL;
  5289.   
  5290. --- 698,699 ----
  5291. ***************
  5292. *** 692,695 ****
  5293.           syslog(L_ERROR, "%s cant restart %m", sp->Name);
  5294. !     else if (cp != NULL)
  5295. !         WCHANsetfrombuffer(sp->Channel, &cp->Out);
  5296.       }
  5297. --- 703,714 ----
  5298.           syslog(L_ERROR, "%s cant restart %m", sp->Name);
  5299. !     else if (cp != NULL) {
  5300. !         if (sp->Buffered) {
  5301. !         /* SITEsetup had to buffer us; save any residue. */
  5302. !         out = &sp->Channel->Out;
  5303. !             if (out->Left)
  5304. !             BUFFset(&sp->Buffer, &out->Data[out->Used], out->Left);
  5305. !         }
  5306. !         else
  5307. !         WCHANsetfrombuffer(sp->Channel, &cp->Out);
  5308. !     }
  5309.       }
  5310. ***************
  5311. *** 696,711 ****
  5312.       else if (cp != NULL && cp->Out.Left) {
  5313. !     /* Try to spool pending data; assume that we failed. */
  5314. !     lost = TRUE;
  5315. !     if (!sp->Spooling && sp->Process < 0) {
  5316. !         syslog(L_ERROR, "%s saving to batchfile %s",
  5317. !         sp->Name, sp->SpoolName);
  5318. !         if (close(cp->fd) < 0)
  5319. !         syslog(L_ERROR, "%s cant close fd %d %m", sp->Name, cp->fd);
  5320. !         if (!SITEspool(sp, cp))
  5321. !         syslog(L_ERROR, "%s cant open %s %m", sp->Name, sp->SpoolName);
  5322. !         else if (WCHANflush(cp))
  5323. !         lost = FALSE;
  5324. !     }
  5325. !     if (lost)
  5326. !         syslog(L_ERROR, "%s dataloss %d", sp->Name, cp->Out.Left);
  5327.       }
  5328. --- 715,726 ----
  5329.       else if (cp != NULL && cp->Out.Left) {
  5330. !      if (sp->Type == FTfile || sp->Spooling) {
  5331. !         /* Can't flush a file?  Hopeless. */
  5332. !          syslog(L_ERROR, "%s dataloss %d", sp->Name, cp->Out.Left);
  5333. !          return;
  5334. !      }
  5335. !      /* Must be a working channel; spool and retry. */
  5336. !     syslog(L_ERROR, "%s spooling %d bytes", sp->Name, cp->Out.Left);
  5337. !      if (SITEspool(sp, cp))
  5338. !         SITEflush(sp, FALSE);
  5339. !      return;
  5340.       }
  5341. ***************
  5342. *** 714,715 ****
  5343. --- 729,733 ----
  5344.       if (cp != NULL) {
  5345. +         /* Make sure we have no dangling pointers to it. */
  5346. +     if (!Restart)
  5347. +         sp->Channel = NULL;
  5348.       CHANclose(cp, sp->Name);
  5349. ***************
  5350. *** 751,753 ****
  5351.   
  5352. !     for (match = SUB_DEFAULT, argv = sp->Patterns; (pat = *argv++) != NULL; ) {
  5353.       subvalue = *pat != SUB_NEGATE;
  5354. --- 769,781 ----
  5355.   
  5356. !     match = SUB_DEFAULT;
  5357. !     if (ME.Patterns) {
  5358. !     for (argv = ME.Patterns; (pat = *argv++) != NULL; ) {
  5359. !         subvalue = *pat != SUB_NEGATE;
  5360. !         if (!subvalue)
  5361. !         pat++;
  5362. !         if (wildmat(name, pat))
  5363. !         match = subvalue;
  5364. !     }
  5365. !     }
  5366. !     for (argv = sp->Patterns; (pat = *argv++) != NULL; ) {
  5367.       subvalue = *pat != SUB_NEGATE;
  5368. ***************
  5369. *** 811,812 ****
  5370. --- 839,841 ----
  5371.       }
  5372. +     sp->Name = NULL;
  5373.       if (sp->Process > 0) {
  5374. ***************
  5375. *** 819,821 ****
  5376.       sp->Entry = NULL;
  5377. -     sp->Name = NULL;
  5378.       }
  5379. --- 848,849 ----
  5380. ***************
  5381. *** 882,883 ****
  5382. --- 910,913 ----
  5383.       fsp = sp;
  5384. +     if (sp->Name == NULL || fsp->Name == NULL)
  5385. +     return;
  5386.       if (fsp->Funnel != NOSITE)
  5387.  
  5388.  
  5389. Index: lib/Makefile
  5390. ===================================================================
  5391. RCS file: lib/RCS/Makefile,v
  5392. retrieving revision 1.25
  5393. diff -c1 -r1.25 lib/Makefile
  5394. *** 1.25    1993/01/29 16:51:40
  5395. --- lib/Makefile    1993/03/18 21:04:33
  5396. ***************
  5397. *** 1,2 ****
  5398. ! ##  $Revision: 1.25 $
  5399.   SHELL    = /bin/sh
  5400. --- 1,2 ----
  5401. ! ##  $Revision: 1.26 $
  5402.   SHELL    = /bin/sh
  5403. ***************
  5404. *** 15,17 ****
  5405.   ##  =()<DBZCFLAGS    = @<DBZCFLAGS>@>()=
  5406. ! DBZCFLAGS    = $(CFLAGS)
  5407.   ##  =()<LDFLAGS    = @<LDFLAGS>@>()=
  5408. --- 15,17 ----
  5409.   ##  =()<DBZCFLAGS    = @<DBZCFLAGS>@>()=
  5410. ! DBZCFLAGS    = $(CFLAGS) -DMMAP
  5411.   ##  =()<LDFLAGS    = @<LDFLAGS>@>()=
  5412. ***************
  5413. *** 24,25 ****
  5414. --- 24,27 ----
  5415.   LINTFILTER    = | sed -n -f ../sedf.sun
  5416. + ##  =()<YACC    = @<YACC>@>()=
  5417. + YACC    = yacc
  5418.   ##  =()<CTAGS        = @<CTAGS>@>()=
  5419. ***************
  5420. *** 75,77 ****
  5421.   llib-linn.ln:        lint
  5422. !     sh ./makellib.sh $(LINTLIBSTYLE) "$(LINTFLAGS)" $(SOURCES)
  5423.   
  5424. --- 77,79 ----
  5425.   llib-linn.ln:        lint
  5426. !     $(SHELL) ./makellib.sh $(LINTLIBSTYLE) "$(LINTFLAGS)" $(SOURCES)
  5427.   
  5428. ***************
  5429. *** 95,97 ****
  5430.       @echo Expect 6 shift/reduce conflicts
  5431. !     yacc parsedate.y
  5432.       @mv y.tab.c parsedate.c
  5433. --- 97,99 ----
  5434.       @echo Expect 6 shift/reduce conflicts
  5435. !     $(YACC) parsedate.y
  5436.       @mv y.tab.c parsedate.c
  5437.  
  5438.  
  5439. Index: lib/clientlib.c
  5440. ===================================================================
  5441. RCS file: lib/RCS/clientlib.c,v
  5442. retrieving revision 1.5
  5443. diff -c1 -r1.5 lib/clientlib.c
  5444. *** 1.5    1993/01/29 16:51:42
  5445. --- lib/clientlib.c    1993/03/18 21:04:34
  5446. ***************
  5447. *** 1,2 ****
  5448. ! /*  $Revision: 1.5 $
  5449.   **
  5450. --- 1,2 ----
  5451. ! /*  $Revision: 1.6 $
  5452.   **
  5453. ***************
  5454. *** 59,61 ****
  5455.       put_server("mode reader");
  5456. !     if (get_server(line2, sizeof line2) < 0)
  5457.       return -1;
  5458. --- 59,61 ----
  5459.       put_server("mode reader");
  5460. !     if (get_server(line2, (int)sizeof line2) < 0)
  5461.       return -1;
  5462. ***************
  5463. *** 159,161 ****
  5464.   
  5465. !     (void)get_server(buff, sizeof buff);
  5466.       (void)fclose(ser_rd_fp);
  5467. --- 159,161 ----
  5468.   
  5469. !     (void)get_server(buff, (int)sizeof buff);
  5470.       (void)fclose(ser_rd_fp);
  5471.  
  5472.  
  5473. Index: lib/getfqdn.c
  5474. ===================================================================
  5475. RCS file: lib/RCS/getfqdn.c,v
  5476. retrieving revision 1.7
  5477. diff -c1 -r1.7 lib/getfqdn.c
  5478. *** 1.7    1993/01/29 16:51:48
  5479. --- lib/getfqdn.c    1993/03/18 21:04:35
  5480. ***************
  5481. *** 1,2 ****
  5482. ! /*  $Revision: 1.7 $
  5483.   **
  5484. --- 1,2 ----
  5485. ! /*  $Revision: 1.8 $
  5486.   **
  5487. ***************
  5488. *** 21,22 ****
  5489. --- 21,23 ----
  5490.       char        *p;
  5491. +     char        temp[SMBUF + 2];
  5492.   
  5493. ***************
  5494. *** 35,38 ****
  5495.       return NULL;
  5496. !     if (strchr(hp->h_name, '.') != NULL) {
  5497. !     if (strlen(hp->h_name) < sizeof hp->h_name - 1)
  5498.           return strcpy(buff, hp->h_name);
  5499. --- 36,45 ----
  5500.       return NULL;
  5501. !     if (strchr(hp->h_name, '.') == NULL) {
  5502. !     /* Try to force DNS lookup if NIS/whatever gets in the way. */
  5503. !     (void)strncpy(temp, buff, sizeof buff);
  5504. !     (void)strcat(temp, ".");
  5505. !     hp = gethostbyname(temp);
  5506. !     }
  5507. !     if (hp != NULL && strchr(hp->h_name, '.') != NULL) {
  5508. !     if (strlen(hp->h_name) < sizeof buff - 1)
  5509.           return strcpy(buff, hp->h_name);
  5510. ***************
  5511. *** 46,48 ****
  5512.       return NULL;
  5513. !     if (strlen(hp->h_name) + 1 + strlen(p) > sizeof buff - 1)
  5514.       /* Doesn't fit. */
  5515. --- 53,55 ----
  5516.       return NULL;
  5517. !     if (strlen(buff) + 1 + strlen(p) > sizeof buff - 1)
  5518.       /* Doesn't fit. */
  5519.  
  5520.  
  5521. Index: lib/inndcomm.c
  5522. ===================================================================
  5523. RCS file: lib/RCS/inndcomm.c,v
  5524. retrieving revision 1.17
  5525. diff -c1 -r1.17 lib/inndcomm.c
  5526. *** 1.17    1993/01/29 16:51:49
  5527. --- lib/inndcomm.c    1993/03/18 21:04:36
  5528. ***************
  5529. *** 1,2 ****
  5530. ! /*  $Revision: 1.17 $
  5531.   **
  5532. --- 1,2 ----
  5533. ! /*  $Revision: 1.18 $
  5534.   **
  5535. ***************
  5536. *** 192,193 ****
  5537. --- 192,200 ----
  5538.   
  5539. +     /* Is server there? */
  5540. +     pid = ICCserverpid();
  5541. +     if (!ICCserveralive(pid)) {
  5542. +     ICCfailure = "dead server";
  5543. +     return -1;
  5544. +     }
  5545.       /* Get the length of the buffer. */
  5546. ***************
  5547. *** 215,217 ****
  5548.       ICCfailure = NULL;
  5549. -     pid = ICCserverpid();
  5550.       len = p - buff;
  5551. --- 222,223 ----
  5552. ***************
  5553. *** 225,227 ****
  5554.   #else
  5555. !     if ((fd = open(_PATH_NEWSCONTROL, O_WRONLY | O_NDELAY)) < 0) {
  5556.       DISPOSE(buff);
  5557. --- 231,233 ----
  5558.   #else
  5559. !     if ((fd = open(_PATH_NEWSCONTROL, O_WRONLY)) < 0) {
  5560.       DISPOSE(buff);
  5561.  
  5562.  
  5563. Index: lib/lockfile.c
  5564. ===================================================================
  5565. RCS file: lib/RCS/lockfile.c,v
  5566. retrieving revision 1.3
  5567. diff -c1 -r1.3 lib/lockfile.c
  5568. *** 1.3    1992/04/03 06:33:24
  5569. --- lib/lockfile.c    1993/03/18 21:04:37
  5570. ***************
  5571. *** 1,2 ****
  5572. ! /*  $Revision: 1.3 $
  5573.   **
  5574. --- 1,2 ----
  5575. ! /*  $Revision: 1.4 $
  5576.   **
  5577. ***************
  5578. *** 50,52 ****
  5579.   
  5580. !     fl.l_type = F_RDLCK;
  5581.       fl.l_whence = SEEK_SET;
  5582. --- 50,52 ----
  5583.   
  5584. !     fl.l_type = F_WRLCK;
  5585.       fl.l_whence = SEEK_SET;
  5586.  
  5587.  
  5588. Index: lib/nonblocking.c
  5589. ===================================================================
  5590. RCS file: lib/RCS/nonblocking.c,v
  5591. retrieving revision 1.5
  5592. diff -c1 -r1.5 lib/nonblocking.c
  5593. *** 1.5    1992/09/14 19:21:28
  5594. --- lib/nonblocking.c    1993/03/18 21:04:37
  5595. ***************
  5596. *** 1,2 ****
  5597. ! /*  $Revision: 1.5 $
  5598.   **
  5599. --- 1,2 ----
  5600. ! /*  $Revision: 1.6 $
  5601.   **
  5602. ***************
  5603. *** 30,31 ****
  5604. --- 30,36 ----
  5605.   #include <fcntl.h>
  5606. + #if    !defined(FNDELAY)
  5607. + #define FNDELAY        O_NDELAY
  5608. + #endif    /* !defined(FNDELAY) */
  5609.   
  5610.  
  5611.  
  5612. Index: lib/parsedate.y
  5613. ===================================================================
  5614. RCS file: lib/RCS/parsedate.y,v
  5615. retrieving revision 1.12
  5616. diff -c1 -r1.12 lib/parsedate.y
  5617. *** 1.12    1992/09/14 19:21:29
  5618. --- lib/parsedate.y    1993/03/18 21:04:38
  5619. ***************
  5620. *** 1,3 ****
  5621.   %{
  5622. ! /* $Revision: 1.12 $
  5623.   **
  5624. --- 1,3 ----
  5625.   %{
  5626. ! /* $Revision: 1.13 $
  5627.   **
  5628. ***************
  5629. *** 466,467 ****
  5630. --- 466,469 ----
  5631.           return -1;
  5632. +     if (Hours == 12)
  5633. +         Hours = 0;
  5634.       if (Meridian == MERpm)
  5635.  
  5636.  
  5637. Index: makedirs.sh
  5638. ===================================================================
  5639. RCS file: RCS/makedirs.sh,v
  5640. retrieving revision 1.5
  5641. diff -c1 -r1.5 makedirs.sh
  5642. *** 1.5    1992/07/28 16:58:40
  5643. --- makedirs.sh    1993/03/18 21:04:39
  5644. ***************
  5645. *** 1,3 ****
  5646.   #! /bin/sh
  5647. ! ##  $Revision: 1.5 $
  5648.   ##  Script to make INN directories.
  5649. --- 1,3 ----
  5650.   #! /bin/sh
  5651. ! ##  $Revision: 1.6 $
  5652.   ##  Script to make INN directories.
  5653. ***************
  5654. *** 26,32 ****
  5655.   ##  =()<SPOOL=@<_PATH_SPOOL>@>()=
  5656. ! SPOOL=/var/spool/news
  5657.   ##  =()<ARCHIVEDIR=@<_PATH_ARCHIVEDIR>@>()=
  5658. ! ARCHIVEDIR=/var/spool/news/news.archive
  5659.   ##  =()<BATCHDIR=@<_PATH_BATCHDIR>@>()=
  5660. ! BATCHDIR=/var/spool/news/out.going
  5661.   ##  =()<MOST_LOGS=@<_PATH_MOST_LOGS>@>()=
  5662. --- 26,32 ----
  5663.   ##  =()<SPOOL=@<_PATH_SPOOL>@>()=
  5664. ! SPOOL=/news/spool
  5665.   ##  =()<ARCHIVEDIR=@<_PATH_ARCHIVEDIR>@>()=
  5666. ! ARCHIVEDIR=/news/spool/news.archive
  5667.   ##  =()<BATCHDIR=@<_PATH_BATCHDIR>@>()=
  5668. ! BATCHDIR=/news/spool/out.going
  5669.   ##  =()<MOST_LOGS=@<_PATH_MOST_LOGS>@>()=
  5670. ***************
  5671. *** 41,51 ****
  5672.   ##  =()<NEWSLIB=@<_PATH_NEWSLIB>@>()=
  5673. ! NEWSLIB=/usr/local/news
  5674.   ##  =()<NEWSBIN=@<_PATH_NEWSBIN>@>()=
  5675. ! NEWSBIN=/usr/local/news/bin
  5676.   ##  =()<CONTROLPROGS=@<_PATH_CONTROLPROGS>@>()=
  5677. ! CONTROLPROGS=/usr/local/news/bin/control
  5678.   ##  =()<RNEWSPROGS=@<_PATH_RNEWSPROGS>@>()=
  5679. ! RNEWSPROGS=/usr/local/news/bin/rnews
  5680.   ##  =()<INNDDIR=@<_PATH_INNDDIR>@>()=
  5681. ! INNDDIR=/usr/local/news/innd
  5682.   ## =()<MOST_LOGS=@<_PATH_MOST_LOGS>@>()=
  5683. --- 41,51 ----
  5684.   ##  =()<NEWSLIB=@<_PATH_NEWSLIB>@>()=
  5685. ! NEWSLIB=/news/lib
  5686.   ##  =()<NEWSBIN=@<_PATH_NEWSBIN>@>()=
  5687. ! NEWSBIN=/news/bin
  5688.   ##  =()<CONTROLPROGS=@<_PATH_CONTROLPROGS>@>()=
  5689. ! CONTROLPROGS=/news/bin/control
  5690.   ##  =()<RNEWSPROGS=@<_PATH_RNEWSPROGS>@>()=
  5691. ! RNEWSPROGS=/news/bin/rnews
  5692.   ##  =()<INNDDIR=@<_PATH_INNDDIR>@>()=
  5693. ! INNDDIR=/news/lib/innd
  5694.   ## =()<MOST_LOGS=@<_PATH_MOST_LOGS>@>()=
  5695. ***************
  5696. *** 58,59 ****
  5697. --- 58,60 ----
  5698.   
  5699. + PFLAG="$1"
  5700.   umask 0
  5701. ***************
  5702. *** 69,71 ****
  5703.       if [ ! -d ${F} ] ; then
  5704. !     mkdir ${F} || exit 1
  5705.       ${CHOWN} ${NEWSUSER} ${F} || exit 1
  5706. --- 70,72 ----
  5707.       if [ ! -d ${F} ] ; then
  5708. !     mkdir ${PFLAG} ${F} || exit 1
  5709.       ${CHOWN} ${NEWSUSER} ${F} || exit 1
  5710.  
  5711.  
  5712. Index: nnrpd/Makefile
  5713. ===================================================================
  5714. RCS file: nnrpd/RCS/Makefile,v
  5715. retrieving revision 1.15
  5716. diff -c1 -r1.15 nnrpd/Makefile
  5717. *** 1.15    1992/08/19 16:34:13
  5718. --- nnrpd/Makefile    1993/03/18 21:04:40
  5719. ***************
  5720. *** 1,2 ****
  5721. ! ##  $Revision: 1.15 $
  5722.   SHELL    = /bin/sh
  5723. --- 1,2 ----
  5724. ! ##  $Revision: 1.16 $
  5725.   SHELL    = /bin/sh
  5726. ***************
  5727. *** 24,26 ****
  5728.   ##  =()<NNRPD    = @<_PATH_NNRPD>@>()=
  5729. ! NNRPD    = /usr/local/etc/in.nnrpd
  5730.   ## =()<OWNER    = -O @<NEWSUSER>@ -G @<NEWSGROUP>@>()=
  5731. --- 24,26 ----
  5732.   ##  =()<NNRPD    = @<_PATH_NNRPD>@>()=
  5733. ! NNRPD    = /news/bin/nnrpd
  5734.   ## =()<OWNER    = -O @<NEWSUSER>@ -G @<NEWSGROUP>@>()=
  5735. ***************
  5736. *** 47,49 ****
  5737.   $(NNRPD):    nnrpd
  5738. !     sh ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  5739.   
  5740. --- 47,49 ----
  5741.   $(NNRPD):    nnrpd
  5742. !     $(SHELL) ../installit.sh $(OWNER) -m 0555 -b .OLD $? $@
  5743.   
  5744. ***************
  5745. *** 51,53 ****
  5746.       rm -f *.o $(ALL)
  5747. !     rm -f nnrpd profiled
  5748.       rm -f all install lint
  5749. --- 51,53 ----
  5750.       rm -f *.o $(ALL)
  5751. !     rm -f nnrpd nnrpdp profiled
  5752.       rm -f all install lint
  5753.  
  5754.  
  5755. Index: nnrpd/article.c
  5756. ===================================================================
  5757. RCS file: nnrpd/RCS/article.c,v
  5758. retrieving revision 1.12
  5759. diff -c1 -r1.12 nnrpd/article.c
  5760. *** 1.12    1993/01/29 16:51:53
  5761. --- nnrpd/article.c    1993/03/18 21:04:41
  5762. ***************
  5763. *** 1,2 ****
  5764. ! /*  $Revision: 1.12 $
  5765.   **
  5766. --- 1,2 ----
  5767. ! /*  $Revision: 1.13 $
  5768.   **
  5769. ***************
  5770. *** 177,179 ****
  5771.       }
  5772. !     CloseOnExec(TRUE, QIOfileno(ARTqp));
  5773.   
  5774. --- 177,179 ----
  5775.       }
  5776. !     CloseOnExec(QIOfileno(ARTqp), TRUE);
  5777.   
  5778. ***************
  5779. *** 203,205 ****
  5780.       return NULL;
  5781. !     CloseOnExec(TRUE, QIOfileno(qp));
  5782.       if ((q = strrchr(p, '/')) != NULL)
  5783. --- 203,205 ----
  5784.       return NULL;
  5785. !     CloseOnExec(QIOfileno(qp), TRUE);
  5786.       if ((q = strrchr(p, '/')) != NULL)
  5787. ***************
  5788. *** 651,653 ****
  5789.       /* Skip leading headers. */
  5790. !     for (fp = &ARTfields[field - 1]; --field >= 0; p++)
  5791.       if ((p = strchr(p, '\t')) == NULL)
  5792. --- 651,653 ----
  5793.       /* Skip leading headers. */
  5794. !     for (fp = &ARTfields[field - 1]; --field >= 0 && *p; p++)
  5795.       if ((p = strchr(p, '\t')) == NULL)
  5796. ***************
  5797. *** 654,655 ****
  5798. --- 654,657 ----
  5799.           return NULL;
  5800. +     if (*p == '\0')
  5801. +     return NULL;
  5802.   
  5803. ***************
  5804. *** 656,658 ****
  5805.       if (fp->HasHeader)
  5806. !     p += fp->Length;
  5807.   
  5808. --- 658,660 ----
  5809.       if (fp->HasHeader)
  5810. !     p += fp->Length + 2;
  5811.   
  5812. ***************
  5813. *** 766,767 ****
  5814. --- 768,770 ----
  5815.       register int        size;
  5816. +     register int        ov_size;
  5817.       register long        lines;
  5818. ***************
  5819. *** 778,781 ****
  5820.       /* Set up place to store headers. */
  5821. !     if (Headers == NULL)
  5822.       Headers = NEW(ARTOVERFIELD, ARTfieldsize);
  5823.       for (hp = Headers, i = ARTfieldsize; --i >= 0; hp++)
  5824. --- 781,787 ----
  5825.       /* Set up place to store headers. */
  5826. !     if (Headers == NULL) {
  5827.       Headers = NEW(ARTOVERFIELD, ARTfieldsize);
  5828. +     for (hp = Headers, i = ARTfieldsize; --i >= 0; hp++)
  5829. +         hp->Length = 0;
  5830. +     }
  5831.       for (hp = Headers, i = ARTfieldsize; --i >= 0; hp++)
  5832. ***************
  5833. *** 825,827 ****
  5834.           (void)strcpy(hp->Header, p);
  5835. -         hp->HasHeader = TRUE;
  5836.           for (p = hp->Header; *p; p++)
  5837. --- 831,832 ----
  5838. ***************
  5839. *** 829,830 ****
  5840. --- 834,836 ----
  5841.               *p = ' ';
  5842. +         hp->HasHeader = TRUE;
  5843.       }
  5844. ***************
  5845. *** 845,847 ****
  5846.       /* Calculate total size, fix hardwired headers. */
  5847. !     size = strlen(name) + ARTfieldsize + 2;
  5848.       for (hp = Headers, fp = ARTfields, i = ARTfieldsize; --i >= 0; hp++, fp++) {
  5849. --- 851,853 ----
  5850.       /* Calculate total size, fix hardwired headers. */
  5851. !     ov_size = strlen(name) + ARTfieldsize + 2;
  5852.       for (hp = Headers, fp = ARTfields, i = ARTfieldsize; --i >= 0; hp++, fp++) {
  5853. ***************
  5854. *** 852,857 ****
  5855.           t = lines;
  5856.           (void)sprintf(value, "%ld", t);
  5857. !         if (hp->HasHeader)
  5858. !         DISPOSE(hp->Header);
  5859. !         hp->Header = COPY(value);
  5860.           hp->HasHeader = TRUE;
  5861. --- 858,871 ----
  5862.           t = lines;
  5863.           (void)sprintf(value, "%ld", t);
  5864. !         size = strlen(value);
  5865. !         if (hp->Length == 0) {
  5866. !          hp->Length = size;
  5867. !         hp->Header = NEW(char, hp->Length + 1);
  5868. !         }
  5869. !         else if (hp->Length < size) {
  5870. !         hp->Length = size;
  5871. !         RENEW(hp->Header, char, hp->Length + 1);
  5872. !         }
  5873. !         (void)strcpy(hp->Header, value);
  5874.           hp->HasHeader = TRUE;
  5875. ***************
  5876. *** 859,861 ****
  5877.       if (hp->HasHeader)
  5878. !         size += strlen(hp->Header);
  5879.       }
  5880. --- 873,875 ----
  5881.       if (hp->HasHeader)
  5882. !         ov_size += strlen(hp->Header);
  5883.       }
  5884. ***************
  5885. *** 864,866 ****
  5886.       if (buffsize == 0) {
  5887. !     buffsize = size;
  5888.       buff = NEW(char, buffsize + 1);
  5889. --- 878,880 ----
  5890.       if (buffsize == 0) {
  5891. !     buffsize = ov_size;
  5892.       buff = NEW(char, buffsize + 1);
  5893. ***************
  5894. *** 867,870 ****
  5895.       }
  5896. !     else if (buffsize < size) {
  5897. !     buffsize = size;
  5898.       RENEW(buff, char, buffsize + 1);
  5899. --- 881,884 ----
  5900.       }
  5901. !     else if (buffsize < ov_size) {
  5902. !     buffsize = ov_size;
  5903.       RENEW(buff, char, buffsize + 1);
  5904. ***************
  5905. *** 879,880 ****
  5906. --- 893,895 ----
  5907.       }
  5908. +     *p = '\0';
  5909.   
  5910. ***************
  5911. *** 942,947 ****
  5912.       /* Get it from the overview? */
  5913. !     if (Overview
  5914. !      && (p = OVERfind(i)) != NULL
  5915. !      && (p = OVERGetHeader(p, Overview)) != NULL) {
  5916. !         Printf("%d %s\r\n", i, p);
  5917.           continue;
  5918. --- 957,961 ----
  5919.       /* Get it from the overview? */
  5920. !     if (Overview && (p = OVERfind(i)) != NULL) {
  5921. !         p = OVERGetHeader(p, Overview);
  5922. !         Printf("%d %s\r\n", i, p && *p ? p : "(none)");
  5923.           continue;
  5924.  
  5925.  
  5926. Index: nnrpd/commands.c
  5927. ===================================================================
  5928. RCS file: nnrpd/RCS/commands.c,v
  5929. retrieving revision 1.13
  5930. diff -c1 -r1.13 nnrpd/commands.c
  5931. *** 1.13    1993/01/29 16:51:54
  5932. --- nnrpd/commands.c    1993/03/18 21:04:42
  5933. ***************
  5934. *** 1,2 ****
  5935. ! /*  $Revision: 1.13 $
  5936.   **
  5937. --- 1,2 ----
  5938. ! /*  $Revision: 1.14 $
  5939.   **
  5940. ***************
  5941. *** 5,6 ****
  5942. --- 5,7 ----
  5943.   #include "nnrpd.h"
  5944. + #include <time.h>
  5945.   
  5946. ***************
  5947. *** 92,93 ****
  5948. --- 93,117 ----
  5949.   /*
  5950. + **  The "DATE" command.  Part of NNTPv2.
  5951. + */
  5952. + /* ARGSUSED0 */
  5953. + FUNCTYPE
  5954. + CMDdate(ac, av)
  5955. +     int        ac;
  5956. +     char    *av[];
  5957. + {
  5958. +     TIMEINFO    t;
  5959. +     struct tm    *gmt;
  5960. +     if (GetTimeInfo(&t) < 0 || (gmt = gmtime(&t.time)) == NULL) {
  5961. +     Reply("%d Can't get time, %s\r\n", NNTP_TEMPERR_VAL, strerror(errno));
  5962. +     return;
  5963. +     }
  5964. +     Reply("%d %04.4d%02.2d%02.2d%02.2d%02.2d%02.2d\r\n",
  5965. +     NNTP_DATE_FOLLOWS_VAL,
  5966. +     gmt->tm_year + 1900, gmt->tm_mon + 1, gmt->tm_mday,
  5967. +     gmt->tm_hour, gmt->tm_min, gmt->tm_sec);
  5968. + }
  5969. + /*
  5970.   **  List active newsgroups, newsgroup descriptions, and distributions.
  5971. ***************
  5972. *** 183,185 ****
  5973.   {
  5974. !     if (EQ(av[1], "reader"))
  5975.       Reply("%d %s InterNetNews NNRP server %s ready (%s).\r\n",
  5976. --- 207,209 ----
  5977.   {
  5978. !     if (caseEQ(av[1], "reader"))
  5979.       Reply("%d %s InterNetNews NNRP server %s ready (%s).\r\n",
  5980.  
  5981.  
  5982. Index: nnrpd/misc.c
  5983. ===================================================================
  5984. RCS file: nnrpd/RCS/misc.c,v
  5985. retrieving revision 1.13
  5986. diff -c1 -r1.13 nnrpd/misc.c
  5987. *** 1.13    1993/01/29 16:51:58
  5988. --- nnrpd/misc.c    1993/03/18 21:04:43
  5989. ***************
  5990. *** 1,2 ****
  5991. ! /*  $Revision: 1.13 $
  5992.   **
  5993. --- 1,2 ----
  5994. ! /*  $Revision: 1.14 $
  5995.   **
  5996. ***************
  5997. *** 247,249 ****
  5998.   */
  5999. ! STRING
  6000.   HISgetent(msg_id, fulldata)
  6001. --- 247,249 ----
  6002.   */
  6003. ! char *
  6004.   HISgetent(msg_id, fulldata)
  6005.  
  6006.  
  6007. Index: nnrpd/nnrpd.c
  6008. ===================================================================
  6009. RCS file: nnrpd/RCS/nnrpd.c,v
  6010. retrieving revision 1.17
  6011. diff -c1 -r1.17 nnrpd/nnrpd.c
  6012. *** 1.17    1993/01/29 16:52:01
  6013. --- nnrpd/nnrpd.c    1993/03/18 21:04:44
  6014. ***************
  6015. *** 1,2 ****
  6016. ! /*  $Revision: 1.17 $
  6017.   **
  6018. --- 1,2 ----
  6019. ! /*  $Revision: 1.18 $
  6020.   **
  6021. ***************
  6022. *** 46,47 ****
  6023. --- 46,48 ----
  6024.   extern FUNCTYPE    CMDauthinfo();
  6025. + extern FUNCTYPE    CMDdate();
  6026.   extern FUNCTYPE    CMDfetch();
  6027. ***************
  6028. *** 74,75 ****
  6029. --- 75,78 ----
  6030.       CMDfetchhelp },
  6031. +     {    "date",        CMDdate,    FALSE,    1,    1,
  6032. +     NULL },
  6033.       {    "group",    CMDgroup,    FALSE,    2,    2,
  6034. ***************
  6035. *** 149,152 ****
  6036.   }
  6037.   /*
  6038. --- 152,153 ----
  6039. ***************
  6040. *** 175,177 ****
  6041.   /*
  6042. ! **  Unimplemented catch-all.  Only needed for IHAVE right now.
  6043.   */
  6044. --- 176,178 ----
  6045.   /*
  6046. ! **  Unimplemented catch-all.
  6047.   */
  6048. ***************
  6049. *** 178,180 ****
  6050.   /* ARGSUSED0 */
  6051. ! STATIC FUNCTYPE
  6052.   CMD_unimp(ac, av)
  6053. --- 179,181 ----
  6054.   /* ARGSUSED0 */
  6055. ! FUNCTYPE
  6056.   CMD_unimp(ac, av)
  6057. ***************
  6058. *** 185,187 ****
  6059.       Reply("%d Transfer permission denied\r\n", NNTP_AUTH_NEEDED_VAL);
  6060. !     else if (caseEQ(av[0], "ihave"))
  6061.       Reply("%d Unsupported\r\n", NNTP_SLAVEOK_VAL);
  6062. --- 186,189 ----
  6063.       Reply("%d Transfer permission denied\r\n", NNTP_AUTH_NEEDED_VAL);
  6064. !     else if (caseEQ(av[0], "slave"))
  6065. !     /* Somebody sends us this?  I don't believe it! */
  6066.       Reply("%d Unsupported\r\n", NNTP_SLAVEOK_VAL);
  6067. ***************
  6068. *** 188,191 ****
  6069.       else
  6070. !     Reply("%d %s not implemented; try help\r\n", av[0],
  6071. !         NNTP_BAD_COMMAND_VAL);
  6072.   }
  6073. --- 190,193 ----
  6074.       else
  6075. !     Reply("%d %s not implemented; try help\r\n",
  6076. !         NNTP_BAD_COMMAND_VAL, av[0]);
  6077.   }
  6078. ***************
  6079. *** 334,335 ****
  6080. --- 336,338 ----
  6081.           continue;
  6082. +     /* Matching for a specific user or just the host? */
  6083.       if (user && (!EQ(user, fields[2]) || !EQ(pass, fields[3])))
  6084.  
  6085.  
  6086. Index: nnrpd/nnrpd.h
  6087. ===================================================================
  6088. RCS file: nnrpd/RCS/nnrpd.h,v
  6089. retrieving revision 1.14
  6090. diff -c1 -r1.14 nnrpd/nnrpd.h
  6091. *** 1.14    1993/01/29 16:52:02
  6092. --- nnrpd/nnrpd.h    1993/03/18 21:04:45
  6093. ***************
  6094. *** 1,2 ****
  6095. ! /*  $Revision: 1.14 $
  6096.   **
  6097. --- 1,2 ----
  6098. ! /*  $Revision: 1.15 $
  6099.   **
  6100. ***************
  6101. *** 49,51 ****
  6102.   **  The XTHREAD command is too ugly to talk about, but if you want it
  6103. ! ** change DONT_DO_XTRHEAD to DONT_DO_XTRHEAD, below.
  6104.   */
  6105. --- 49,51 ----
  6106.   **  The XTHREAD command is too ugly to talk about, but if you want it
  6107. ! **  change DONT_DO_XTRHEAD to DO_DO_XTRHEAD, below.
  6108.   */
  6109. ***************
  6110. *** 139,141 ****
  6111.   extern GROUPENTRY    *GRPfind();
  6112. ! extern STRING        HISgetent();
  6113.   extern long        LOCALtoGMT();
  6114. --- 139,141 ----
  6115.   extern GROUPENTRY    *GRPfind();
  6116. ! extern char        *HISgetent();
  6117.   extern long        LOCALtoGMT();
  6118.  
  6119.  
  6120. Index: samples/checkgroups
  6121. ===================================================================
  6122. RCS file: samples/RCS/checkgroups,v
  6123. retrieving revision 1.12
  6124. diff -c1 -r1.12 samples/checkgroups
  6125. *** 1.12    1993/01/29 16:52:04
  6126. --- samples/checkgroups    1993/03/18 21:04:46
  6127. ***************
  6128. *** 1,3 ****
  6129.   #! /bin/sh
  6130. ! ##  $Revision: 1.12 $
  6131.   ##  Checkgroups control-message handler.
  6132. --- 1,3 ----
  6133.   #! /bin/sh
  6134. ! ##  $Revision: 1.13 $
  6135.   ##  Checkgroups control-message handler.
  6136. ***************
  6137. *** 13,21 ****
  6138.       (
  6139. !     echo "${FROM} posted the following checkgroups message."
  6140.       echo 'If you want to process it, then feed the body of the'
  6141. !     echo 'message below into'
  6142. !     echo "    ${CONTROLPROGS}/docheckgroups"
  6143. !     echo "as the \"${NEWSUSER}\" userid."
  6144.       echo ''
  6145. !     cat ${ARTICLE}
  6146.       ) | ${MAILCMD} -s "checkgroups by ${FROM}" ${NEWSMASTER}
  6147. --- 13,24 ----
  6148.       (
  6149. !     echo "${FROM} posted the following checkgroups message:"
  6150. !     ${SED} -e '/^$/q' -e 's/^/    /' <${ARTICLE}
  6151. !     echo ''
  6152.       echo 'If you want to process it, then feed the body of the'
  6153. !     echo 'message into docheckgroups while running as the'
  6154. !     echo "\"${NEWSUSER}\" userid:"
  6155.       echo ''
  6156. !     echo "${CONTROLPROGS}/docheckgroups <<-EOF-"
  6157. !     ${SED} -e '1,/^$/d' <${ARTICLE}
  6158. !     echo '-EOF-'
  6159.       ) | ${MAILCMD} -s "checkgroups by ${FROM}" ${NEWSMASTER}
  6160.  
  6161.  
  6162. Index: samples/ctlrun
  6163. ===================================================================
  6164. RCS file: samples/RCS/ctlrun,v
  6165. retrieving revision 1.5
  6166. diff -c1 -r1.5 samples/ctlrun
  6167. *** 1.5    1992/09/14 19:21:34
  6168. --- samples/ctlrun    1993/03/18 21:04:47
  6169. ***************
  6170. *** 1,3 ****
  6171.   #!/bin/sh
  6172. ! ##  $Revision: 1.5 $
  6173.   ##  Run all control messages named on the command line, or in the spool
  6174. --- 1,3 ----
  6175.   #!/bin/sh
  6176. ! ##  $Revision: 1.6 $
  6177.   ##  Run all control messages named on the command line, or in the spool
  6178. ***************
  6179. *** 5,17 ****
  6180.   
  6181. ! ##  =()<NEWSMASTER=@<NEWSMASTER>@>()=
  6182. ! NEWSMASTER=usenet
  6183. ! ##  =()<SPOOL=@<_PATH_SPOOL>@>()=
  6184. ! SPOOL=/var/spool/news
  6185. ! ##  =()<CONTROLPROGS=@<_PATH_CONTROLPROGS>@>()=
  6186. ! CONTROLPROGS=/usr/local/news/bin/control
  6187. ! ##  =()<SED=@<_PATH_SED>@>()=
  6188. ! SED=sed
  6189.   
  6190. ! INP=${TMPDIR-/tmp}/inp$$
  6191. ! TEMP=${TMPDIR-/tmp}/ctl$$
  6192.   case "$#" in
  6193. --- 5,11 ----
  6194.   
  6195. ! ##  =()<. @<_PATH_SHELLVARS>@>()=
  6196. ! . /news/lib/innshellvars
  6197.   
  6198. ! INP=${TMPDIR}/inp$$
  6199. ! TEMP=${TMPDIR}/ctl$$
  6200.   case "$#" in
  6201.  
  6202.  
  6203. Index: samples/docheckgroups
  6204. ===================================================================
  6205. RCS file: samples/RCS/docheckgroups,v
  6206. retrieving revision 1.3
  6207. diff -c1 -r1.3 samples/docheckgroups
  6208. *** 1.3    1993/01/29 16:52:09
  6209. --- samples/docheckgroups    1993/03/18 21:04:49
  6210. ***************
  6211. *** 1,3 ****
  6212.   #! /bin/sh
  6213. ! ##  $Revision: 1.3 $
  6214.   ##  Script to execute checkgroups text; results to stdout.
  6215. --- 1,3 ----
  6216.   #! /bin/sh
  6217. ! ##  $Revision: 1.4 $
  6218.   ##  Script to execute checkgroups text; results to stdout.
  6219. ***************
  6220. *** 30,34 ****
  6221.   
  6222. ! ${EGREP} "${PATS}" ${ACTIVE} | ${SED} -n "/m\$/s/ .*//p" | sort >${T}/$$amod.all
  6223.   ${EGREP} "${PATS}" ${T}/$$msg |
  6224. ! ${SED} -n "/Moderated/s/[     ][     ]*.*//p" | sort >${T}/$$ng.mod
  6225.   
  6226. --- 30,34 ----
  6227.   
  6228. ! ${EGREP} "${PATS}" ${ACTIVE} | ${SED} -n '/ m$/s/ .*//p' | sort >${T}/$$amod.all
  6229.   ${EGREP} "${PATS}" ${T}/$$msg |
  6230. ! ${SED} -n '/(Moderated)$/s/[     ].*//p' | sort >${T}/$$ng.mod
  6231.   
  6232. ***************
  6233. *** 50,51 ****
  6234. --- 50,52 ----
  6235.           echo "    ctlinnd rmgroup $i"
  6236. +         ${EGREP} "^$i    " ${NEWSGROUPS} >>${T}/$$ngdel
  6237.       done
  6238. ***************
  6239. *** 61,63 ****
  6240.       for i in `cat ${T}/$$add.unmod` ; do
  6241. !         echo "    ctlinnd newgroup $i y ''"
  6242.       done
  6243. --- 62,65 ----
  6244.       for i in `cat ${T}/$$add.unmod` ; do
  6245. !         echo "    ctlinnd newgroup $i y ${FROM}"
  6246. !         ${EGREP} "^$i    " ${T}/$$msg >>${T}/$$ngadd
  6247.       done
  6248. ***************
  6249. *** 64,66 ****
  6250.       for i in `cat ${T}/$$add.mod` ; do
  6251. !         echo "    ctlinnd newgroup $i m ''"
  6252.       done
  6253. --- 66,69 ----
  6254.       for i in `cat ${T}/$$add.mod` ; do
  6255. !         echo "    ctlinnd newgroup $i m ${FROM}"
  6256. !         ${EGREP} "^$i    " ${T}/$$msg >>${T}/$$ngadd
  6257.       done
  6258. ***************
  6259. *** 77,78 ****
  6260. --- 80,82 ----
  6261.           echo "    ctlinnd changegroup $i y"
  6262. +         ${EGREP} "^$i    " ${T}/$$msg >>${T}/$$ngchng
  6263.       done
  6264. ***************
  6265. *** 89,90 ****
  6266. --- 93,95 ----
  6267.           echo "    ctlinnd changegroup $i m"
  6268. +         ${EGREP} "^$i    " ${T}/$$msg >>${T}/$$ngchng
  6269.       done
  6270. ***************
  6271. *** 94,99 ****
  6272.   
  6273. ! if [ -s ${T}/$$out ] ; then
  6274.       cat ${T}/$$out
  6275. !     echo "And remember to update ${NEWSGROUPS}."
  6276. ! fi
  6277.   
  6278. --- 99,120 ----
  6279.   
  6280. ! test -s ${T}/$$out && {
  6281.       cat ${T}/$$out
  6282. !     echo 'exit # so you can feed this message into the shell'
  6283. !     echo "# And remember to update ${NEWSGROUPS}."
  6284. !     test -s ${T}/$$ngdel && {
  6285. !     echo "# Remove these lines:"
  6286. !     ${SED} "s/^/#    /" ${T}/$$ngdel
  6287. !     echo ''
  6288. !     }
  6289. !     test -s ${T}/$$ngadd && {
  6290. !     echo "# Add these lines:"
  6291. !     ${SED} "s/^/#   /" ${T}/$$ngadd
  6292. !     echo ''
  6293. !     }
  6294. !     test -s ${T}/$$ngchng && {
  6295. !     echo "# Change these lines:"
  6296. !     ${SED} "s/^/#   /" ${T}/$$ngchng
  6297. !     echo ''
  6298. !     }
  6299. ! }
  6300.   
  6301.  
  6302.  
  6303. Index: samples/inncheck
  6304. ===================================================================
  6305. RCS file: samples/RCS/inncheck,v
  6306. retrieving revision 1.9
  6307. diff -c1 -r1.9 samples/inncheck
  6308. *** 1.9    1993/01/29 16:52:11
  6309. --- samples/inncheck    1993/03/18 21:04:51
  6310. ***************
  6311. *** 1,3 ****
  6312. ! #! /usr/bin/perl -- # -*-Perl-*-
  6313. ! ##  $Revision: 1.9 $
  6314.   ##  Sanity-check the configuration of an INN system
  6315. --- 1,3 ----
  6316. ! #!/usr/bin/perl --
  6317. ! ##  $Revision: 1.10 $
  6318.   ##  Sanity-check the configuration of an INN system
  6319. ***************
  6320. *** 230,232 ****
  6321.       print "$file:$line: unknown action `$act'\n"
  6322. !         if !defined $control'actions{$1};
  6323.       }
  6324. --- 230,232 ----
  6325.       print "$file:$line: unknown action `$act'\n"
  6326. !         if !defined $control'actions{$act};
  6327.       }
  6328. ***************
  6329. *** 424,426 ****
  6330.       '<',    '^\d+$',
  6331. !     'A',    '^d$',
  6332.       'B',    '^\d+(/\d+)?$',
  6333. --- 424,426 ----
  6334.       '<',    '^\d+$',
  6335. !     'A',    '^[dp]+$',
  6336.       'B',    '^\d+(/\d+)?$',
  6337. ***************
  6338. *** 608,611 ****
  6339.   
  6340. !     print "$file:$line: unknown header `$header'\n"
  6341. !         if !defined $overview_fmtheaders{$header};
  6342.       if ( $mode eq "full" ) {
  6343. --- 608,611 ----
  6344.   
  6345. !     #print "$file:$line: unknown header `$header'\n"
  6346. !     #    if !defined $overview_fmtheaders{$header};
  6347.       if ( $mode eq "full" ) {
  6348.  
  6349.  
  6350. Index: samples/innshellvars
  6351. ===================================================================
  6352. RCS file: samples/RCS/innshellvars,v
  6353. retrieving revision 1.1
  6354. diff -c1 -r1.1 samples/innshellvars
  6355. *** 1.1    1993/01/20 21:37:40
  6356. --- samples/innshellvars    1993/03/18 21:04:52
  6357. ***************
  6358. *** 1,5 ****
  6359.   #! /bin/sh
  6360. ! ##  $Revision: 1.1 $
  6361.   ##  Set up any and all shell variables that an INN shell script
  6362. ! ##  might need.
  6363.   
  6364. --- 1,5 ----
  6365.   #! /bin/sh
  6366. ! ##  $Revision: 1.2 $
  6367.   ##  Set up any and all shell variables that an INN shell script
  6368. ! ##  might need.  Also sets umask.
  6369.   
  6370. ***************
  6371. *** 11,13 ****
  6372.   ##  =()<AWK=@<_PATH_AWK>@>()=
  6373. ! AWK=/usr/local/bin/gawk
  6374.   ##  =()<BATCH=@<_PATH_BATCHDIR>@>()=
  6375. --- 11,13 ----
  6376.   ##  =()<AWK=@<_PATH_AWK>@>()=
  6377. ! AWK=/bin/gawk
  6378.   ##  =()<BATCH=@<_PATH_BATCHDIR>@>()=
  6379. ***************
  6380. *** 25,29 ****
  6381.   ##  =()<EGREP=@<_PATH_EGREP>@>()=
  6382. ! EGREP=/usr/local/bin/egnugrep
  6383. ! ##  =()<EGREP=@<_PATH_EGREP>@>()=
  6384. ! EGREP=/usr/local/bin/egnugrep
  6385.   ##  =()<ERRLOG=@<_PATH_ERRLOG>@>()=
  6386. --- 25,27 ----
  6387.   ##  =()<EGREP=@<_PATH_EGREP>@>()=
  6388. ! EGREP=/bin/egnugrep
  6389.   ##  =()<ERRLOG=@<_PATH_ERRLOG>@>()=
  6390. ***************
  6391. *** 62,65 ****
  6392.   NEWSBIN=/news/bin
  6393. - ##  =()<NEWSBIN=@<_PATH_NEWSBIN>@>()=
  6394. - NEWSBIN=/news/bin
  6395.   ##  =()<NEWSCONTROL=@<_PATH_NEWSCONTROL>@>()=
  6396. --- 60,61 ----
  6397. ***************
  6398. *** 94,95 ****
  6399. --- 90,93 ----
  6400.   TEMPSOCK=`basename /news/lib/innd/ctlinndXXXXXX | ${SED} -e 's/XXXXXX$/*/'`
  6401. + ##  =()<TEMPSOCKDIR=`echo @<_PATH_TEMPSOCK>@ | ${SED} -e 's@/[^/]*$@@'`>()=
  6402. + TEMPSOCKDIR=`echo /news/lib/innd/ctlinndXXXXXX | ${SED} -e 's@/[^/]*$@@'`
  6403.   ##  =()<WATCHPID=@<_PATH_WATCHPID>@>()=
  6404. ***************
  6405. *** 106 ****
  6406. --- 104,107 ----
  6407.   export PATH
  6408. + ##  =()<umask @<NEWSUMASK>@>()=
  6409. + umask 0
  6410.  
  6411.  
  6412. Index: samples/innwatch
  6413. ===================================================================
  6414. RCS file: samples/RCS/innwatch,v
  6415. retrieving revision 1.10
  6416. diff -c1 -r1.10 samples/innwatch
  6417. *** 1.10    1993/01/29 16:52:14
  6418. --- samples/innwatch    1993/03/18 21:04:53
  6419. ***************
  6420. *** 1,3 ****
  6421.   #! /bin/sh
  6422. ! ##  $Revision: 1.10 $
  6423.   ##  Watch the state of the system relative to the news subsystem.
  6424. --- 1,3 ----
  6425.   #! /bin/sh
  6426. ! ##  $Revision: 1.11 $
  6427.   ##  Watch the state of the system relative to the news subsystem.
  6428. ***************
  6429. *** 9,10 ****
  6430. --- 9,14 ----
  6431.   ##  Extensively modified by <kre@munnari.oz.au>.
  6432. + ##  Watch a log file and send mail when it gets new output by
  6433. + ##    Steve Groom <stevo@elroy.Jpl.Nasa.Gov>
  6434. + ##  Steve's extensions merged in innwatch by
  6435. + ##    <Christophe.Wolfhugel@grasp.insa-lyon.fr>
  6436.   
  6437. ***************
  6438. *** 16,18 ****
  6439. --- 20,27 ----
  6440.   DAILY=${LOCKS}/LOCK.news.daily
  6441. + ##  Where to put the timestamp file (directory and filename).
  6442. + TIMESTAMP=${LOCKS}/${PROGNAME}.time
  6443.   
  6444. + ##  Logfile to watch. Comment out if no logwatch.
  6445. + LOGFILE=${MOST_LOGS}/news.crit
  6446.   ##  Parse JCL.
  6447. ***************
  6448. *** 21,23 ****
  6449.       X-f)
  6450. !     FILE="$2"
  6451.       shift
  6452. --- 30,32 ----
  6453.       X-f)
  6454. !     FILE=$2
  6455.       shift
  6456. ***************
  6457. *** 27,30 ****
  6458.       ;;
  6459.       X-t)
  6460. !     SLEEPTIME="$2"
  6461.       shift
  6462. --- 36,46 ----
  6463.       ;;
  6464. +     X-l)
  6465. +     LOGFILE=$2
  6466. +     shift
  6467. +     ;;
  6468. +     X-l*)
  6469. +     LOGFILE=`expr "$1" : '-s\(.*\)'`
  6470. +     ;;
  6471.       X-t)
  6472. !     SLEEPTIME=$2
  6473.       shift
  6474. ***************
  6475. *** 71,75 ****
  6476.   
  6477. ! trap '
  6478. !     (echo "${PROGNAME} waiting for INND to start (pid: $$)"; date) >${STATUS}
  6479. ! ' 2
  6480.   
  6481. --- 87,92 ----
  6482.   
  6483. ! trap '(
  6484. !     echo "${PROGNAME} waiting for INND to start (pid: $$)"
  6485. !     date
  6486. !     ) >${INNWSTATUS}' 2
  6487.   
  6488. ***************
  6489. *** 78,80 ****
  6490.   while PID=`cat ${SERVERPID} 2>/dev/null`; test -z "${PID}"; do
  6491. !     sleep "${SLEEPTIME}"
  6492.   done
  6493. --- 95,97 ----
  6494.   while PID=`cat ${SERVERPID} 2>/dev/null`; test -z "${PID}"; do
  6495. !     sleep ${SLEEPTIME}
  6496.   done
  6497. ***************
  6498. *** 82,91 ****
  6499.   trap '(
  6500. !     if [ -z "${STATE}" ]; then X=RUN; else X="${STATE}"; fi;
  6501. !     echo "${PROGNAME} state: ${X} (pid: $$)";
  6502. !     if [ -z "${INND}" ]; then X=GO; else X="${INND}"; fi;
  6503. !     if [ -n "${REASON}" ]; then R=": ${REASON}"; else R=""; fi;
  6504. !     echo "Controlled INND state: ${X}${R}";
  6505. !     echo "${PROGNAME} examination interval: ${SLEEPTIME} seconds";
  6506. !     date;
  6507. ! ) >${STATUS}' 2
  6508.   
  6509. --- 99,114 ----
  6510.   trap '(
  6511. !     if [ -z "${STATE}" ]; then
  6512. !         echo "${PROGNAME} state RUN interval ${SLEEPTIME} pid $$"
  6513. !     else
  6514. !         echo "${PROGNAME} state ${STATE} interval ${SLEEPTIME} pid $$"
  6515. !     fi
  6516. !     if [ -z "${INND}" ]; then
  6517. !         X=GO
  6518. !     else
  6519. !         X="${INND}"
  6520. !     fi
  6521. !     test -n "${REASON}" && X="${X}: ${REASON}"
  6522. !     echo "INND state ${X}"
  6523. !     date
  6524. !     ) >${INNWSTATUS}' 2
  6525.   
  6526. ***************
  6527. *** 96,99 ****
  6528.   
  6529. ! while { sleep "${NEXTSLEEP}" & wait; } ; : ; do
  6530. !     NEXTSLEEP="${SLEEPTIME}"
  6531.   
  6532. --- 119,122 ----
  6533.   
  6534. ! while { sleep ${NEXTSLEEP} & wait; } ; : ; do
  6535. !     NEXTSLEEP=${SLEEPTIME}
  6536.   
  6537. ***************
  6538. *** 106,108 ****
  6539.       ## Notify NEWSMASTER if it has stopped or just restarted.
  6540. !     if ctlinnd -s -t 120 mode ; then
  6541.       ${HASEXITED} && {
  6542. --- 129,131 ----
  6543.       ## Notify NEWSMASTER if it has stopped or just restarted.
  6544. !     if ctlinnd -s -t 120 mode 2>/dev/null ; then
  6545.       ${HASEXITED} && {
  6546. ***************
  6547. *** 164,166 ****
  6548.       for X in a b; do    # meaningless trash because we have no goto
  6549. !         if [ -z "${CND}" ]; then X=- ; else X="${CND}"; fi
  6550.           set -$- X ${X}; shift
  6551. --- 187,193 ----
  6552.       for X in a b; do    # meaningless trash because we have no goto
  6553. !         if [ -z "${CND}" ]; then
  6554. !         X=-
  6555. !         else
  6556. !         X="${CND}"
  6557. !         fi
  6558.           set -$- X ${X}; shift
  6559. ***************
  6560. *** 269,270 ****
  6561. --- 296,322 ----
  6562.   
  6563. +     if [ -n "${LOGFILE}" -a -f "${LOGFILE}" ]; then
  6564. +     if [ ! -f ${TIMESTAMP} ]; then
  6565. +         DOIT=${LOGFILE}
  6566. +     else
  6567. +         # use ls to print most recently modified file first.
  6568. +         # If that's ${LOGFILE}, it's changed since the last pass.
  6569. +         DOIT="`ls -t ${TIMESTAMP} ${LOGFILE} | sed -e 1q | grep ${LOGFILE}`"
  6570. +     fi
  6571. +     # If the file has been modified more recently than the timestamp,
  6572. +     # and the file has length greater than 0, send the warning.
  6573. +     if [ -n "${DOIT}" -a -s ${LOGFILE} ]; then
  6574. +         date >${TIMESTAMP}
  6575. +         (
  6576. +         ls -l ${LOGFILE}
  6577. +         echo "-----"
  6578. +         ctlinnd -t120 mode
  6579. +         echo "-----"
  6580. +         cat ${LOGFILE}
  6581. +         ) 2>&1 \
  6582. +         | ${MAILCMD} -s "${PROGNAME} warning: messages in ${LOGFILE}" \
  6583. +         ${NEWSMASTER}
  6584. +     fi
  6585. +     fi
  6586.   done
  6587. ***************
  6588. *** 271,272 ****
  6589.   
  6590. ! rm -f "${LOCK}"
  6591. --- 323,324 ----
  6592.   
  6593. ! rm -f ${LOCK}
  6594.  
  6595.  
  6596. Index: samples/newgroup
  6597. ===================================================================
  6598. RCS file: samples/RCS/newgroup,v
  6599. retrieving revision 1.19
  6600. diff -c1 -r1.19 samples/newgroup
  6601. *** 1.19    1993/01/29 16:52:17
  6602. --- samples/newgroup    1993/03/18 21:04:55
  6603. ***************
  6604. *** 1,3 ****
  6605.   #! /bin/sh
  6606. ! ##  $Revision: 1.19 $
  6607.   ##  Newgroup control-message handler
  6608. --- 1,3 ----
  6609.   #! /bin/sh
  6610. ! ##  $Revision: 1.20 $
  6611.   ##  Newgroup control-message handler
  6612. ***************
  6613. *** 44,45 ****
  6614. --- 44,46 ----
  6615.   ##  Kill the chefs; from <wesommer@athena.mit.edu>.
  6616. + ##  That is, turn "alt.foo.bar.bar.bar" into an "x" group.
  6617.   #case `echo $1 | awk -F. '{
  6618. ***************
  6619. *** 57,58 ****
  6620. --- 58,60 ----
  6621.   ##  Compare group against active file.
  6622. + SUFFIX=""
  6623.   LINE=`grep "^$1 " <${ACTIVE} 2>/dev/null`
  6624. ***************
  6625. *** 76,77 ****
  6626. --- 78,80 ----
  6627.       WORD="made moderated"
  6628. +     SUFFIX=" (Moderated)"
  6629.       ;;
  6630. ***************
  6631. *** 110,123 ****
  6632.   
  6633. ! ##  Try to update the newsgroups file?
  6634. ! case $WORD in
  6635. ! created)
  6636. !     ;;
  6637. ! *)
  6638. !     exit
  6639. !     ;;
  6640. ! esac
  6641.   
  6642. ! ##  We're sending to a file.
  6643. ! LOCK=${LOCKS}/LOCK.newgroup
  6644.   PID=$$
  6645. --- 113,136 ----
  6646.   
  6647. ! ##  Get a description of the newsgroup; first from the article, and
  6648. ! ##  then from the newsgroups file.
  6649. ! DESC=`${SED} <${ARTICLE} -n -e "
  6650. ! :top
  6651. ! /^For your newsgroups file:\$/b scan
  6652. ! n
  6653. ! b top
  6654. ! :scan
  6655. ! n
  6656. ! /$1[     ]/ {
  6657. ! p
  6658. ! q
  6659. ! }
  6660. ! b scan"`
  6661. ! test -z "${DESC}" && {
  6662. !     DESC=`${EGREP} "^$1    " ${NEWSGROUPS} | ${SED} "s/[     ]*(Moderated)//"`
  6663. !     test -z "${DESC}" && DESC="$1    ?"
  6664. ! }
  6665. ! DESC="${DESC}${SUFFIX}"
  6666.   
  6667. ! ##  Lock so we can update newsgroups
  6668. ! LOCK=${LOCKS}/LOCK.newsgroups
  6669.   PID=$$
  6670. ***************
  6671. *** 138,153 ****
  6672.   
  6673. ! ${SED} <${ARTICLE} >>${NEWSGROUPS} -n -e "
  6674. ! :top
  6675. ! /^For your newsgroups file:\$/b scan
  6676. ! n
  6677. ! b top
  6678. ! :scan
  6679. ! n
  6680. ! /$1[     ]/ {
  6681. ! p
  6682. ! q
  6683. ! }
  6684. ! b scan"
  6685. ! rm -f ${LOCK}
  6686.   exit
  6687. --- 151,156 ----
  6688.   
  6689. ! ${EGREP} -v "^$1[    ]" <${NEWSGROUPS} >${TEMP}
  6690. ! cat ${TEMP} >${NEWSGROUPS}
  6691. ! echo "${DESC}" >>${NEWSGROUPS}
  6692. ! rm ${TEMP} ${LOCK}
  6693.   exit
  6694.  
  6695.  
  6696. Index: samples/news.daily
  6697. ===================================================================
  6698. RCS file: samples/RCS/news.daily,v
  6699. retrieving revision 1.21
  6700. diff -c1 -r1.21 samples/news.daily
  6701. *** 1.21    1993/01/29 16:52:18
  6702. --- samples/news.daily    1993/03/18 21:04:57
  6703. ***************
  6704. *** 1,3 ****
  6705.   #! /bin/sh
  6706. ! ##  $Revision: 1.21 $
  6707.   ##  Daily news maintenance.
  6708. --- 1,3 ----
  6709.   #! /bin/sh
  6710. ! ##  $Revision: 1.22 $
  6711.   ##  Daily news maintenance.
  6712. ***************
  6713. *** 262,264 ****
  6714.   ##  Remove old sockets.
  6715. ! ${DORM} && find ${INNDDIR} -name "${TEMPSOCK}" -mtime +2 -exec rm -f '{}' ';'
  6716.   
  6717. --- 262,265 ----
  6718.   ##  Remove old sockets.
  6719. ! ${DORM} &&
  6720. !     find ${TEMPSOCKDIR} -name "${TEMPSOCK}" -mtime +2 -exec rm -f '{}' ';'
  6721.   
  6722.  
  6723.  
  6724. Index: samples/newsfeeds
  6725. ===================================================================
  6726. RCS file: samples/RCS/newsfeeds,v
  6727. retrieving revision 1.11
  6728. diff -c1 -r1.11 samples/newsfeeds
  6729. *** 1.11    1993/01/29 16:52:19
  6730. --- samples/newsfeeds    1993/03/18 21:04:58
  6731. ***************
  6732. *** 1,2 ****
  6733. ! ##  $Revision: 1.11 $
  6734.   ##  newsfeeds - determine where Usenet articles get sent
  6735. --- 1,2 ----
  6736. ! ##  $Revision: 1.12 $
  6737.   ##  newsfeeds - determine where Usenet articles get sent
  6738. ***************
  6739. *** 9,11 ****
  6740.   ##    <size        Article must be less then size bytes.
  6741. ! ##    Ad        Article must have Distribution header.
  6742.   ##    Bhigh/low    Internal buffer size before writing to output.
  6743. --- 9,12 ----
  6744.   ##    <size        Article must be less then size bytes.
  6745. ! ##    Aitems        Article checks -- d (must have Distribution header)
  6746. ! ##            p (don't check for site in Path header).
  6747.   ##    Bhigh/low    Internal buffer size before writing to output.
  6748.  
  6749.  
  6750. Index: samples/rc.news
  6751. ===================================================================
  6752. RCS file: samples/RCS/rc.news,v
  6753. retrieving revision 1.17
  6754. diff -c1 -r1.17 samples/rc.news
  6755. *** 1.17    1993/01/29 16:52:22
  6756. --- samples/rc.news    1993/03/18 21:04:59
  6757. ***************
  6758. *** 1,3 ****
  6759.   #! /bin/sh
  6760. ! ##  $Revision: 1.17 $
  6761.   ##  News boot script.
  6762. --- 1,3 ----
  6763.   #! /bin/sh
  6764. ! ##  $Revision: 1.18 $
  6765.   ##  News boot script.
  6766. ***************
  6767. *** 11,13 ****
  6768.   DOINNWATCH=false
  6769. - DOLOGWATCH=false
  6770.   MAIL="${MAILCMD} -s 'Boot-time Usenet warning on `hostname`' ${NEWSMASTER}"
  6771. --- 11,12 ----
  6772. ***************
  6773. *** 49,50 ****
  6774. --- 48,54 ----
  6775.       RFLAG="-r"
  6776. +     # You might want to rebuild the DBZ database, too:
  6777. +     #echo "cd ${NEWSLIB} \
  6778. +     #        && makehistory -r \
  6779. +     #        && mv history.n.dir history.dir \
  6780. +     #        && mv history.n.pag history.pag" | su ${NEWSUSER}
  6781.   fi
  6782. ***************
  6783. *** 54,55 ****
  6784. --- 58,60 ----
  6785.   ( cd ${LOCKS} && rm -f LOCK* )
  6786. + ( cd ${TEMPSOCKDIR} && rm -f ${TEMPSOCK} )
  6787.   rm -f ${NEWSCONTROL} ${NNTPCONNECT} ${SERVERPID}
  6788. ***************
  6789. *** 62,68 ****
  6790.   ${DOINNWATCH} && {
  6791. !     su ${NEWSUSER} -c "( ( sleep 60 ; ${INNWATCH} ) & )"
  6792.   }
  6793. - ${DOLOGWATCH} && {
  6794. -     su ${NEWSUSER} -c "( ( sleep 60 ; ${LOGWATCH} ) & )"
  6795. - }
  6796.   
  6797. --- 67,70 ----
  6798.   ${DOINNWATCH} && {
  6799. !     echo "( ( sleep 60 ; ${INNWATCH} ) & )" | su ${NEWSUSER}
  6800.   }
  6801.   
  6802. ***************
  6803. *** 75,77 ****
  6804.       ) | eval ${MAIL}
  6805. !     su ${NEWSUSER} -c "${NEWSBIN}/expirerm ${RMFILE}" &
  6806.   fi
  6807. --- 77,79 ----
  6808.       ) | eval ${MAIL}
  6809. !     echo "${NEWSBIN}/expirerm ${RMFILE}" | su ${NEWSUSER} &
  6810.   fi
  6811.  
  6812.  
  6813. Index: samples/rmgroup
  6814. ===================================================================
  6815. RCS file: samples/RCS/rmgroup,v
  6816. retrieving revision 1.15
  6817. diff -c1 -r1.15 samples/rmgroup
  6818. *** 1.15    1992/09/14 19:21:43
  6819. --- samples/rmgroup    1993/03/18 21:05:00
  6820. ***************
  6821. *** 1,3 ****
  6822.   #! /bin/sh
  6823. ! ##  $Revision: 1.15 $
  6824.   ##  Rmgroup control-message handler
  6825. --- 1,3 ----
  6826.   #! /bin/sh
  6827. ! ##  $Revision: 1.16 $
  6828.   ##  Rmgroup control-message handler
  6829. ***************
  6830. *** 7,9 ****
  6831.   ##  =()<. @<_PATH_PARSECTL>@ "$@">()=
  6832. ! . /usr/local/news/parsecontrol "$@"
  6833.   
  6834. --- 7,9 ----
  6835.   ##  =()<. @<_PATH_PARSECTL>@ "$@">()=
  6836. ! . /news/bin/control/parsecontrol "$@"
  6837.   
  6838. ***************
  6839. *** 52,59 ****
  6840.   ${WRITELOG} ${LOGFILE} "rmgroup $1 by ${FROM}" <${ARTICLE}
  6841. ! grep -v "^$1[     ]" <${NEWSGROUPS} >${TEMP}
  6842. ! cat ${TEMP} >${NEWSGROUPS}
  6843. ! #I don't know about this:
  6844. ! #${SED} -e "s/^$1 /# `date` $1 /" <${ACTIVETIMES} >${TEMP}
  6845. ! #cat ${TEMP} >${ACTIVETIMES}
  6846.   
  6847.   exit
  6848. --- 52,75 ----
  6849.   ${WRITELOG} ${LOGFILE} "rmgroup $1 by ${FROM}" <${ARTICLE}
  6850. ! ##  We're sending to a file.
  6851. ! LOCK=${LOCKS}/LOCK.newsgroups
  6852. ! PID=$$
  6853. ! TRY=0
  6854. ! MAXTRY=60
  6855. ! export LOCK MAXTRY PID LOGFILE TRY
  6856. ! while [ ${TRY} -lt ${MAXTRY} ]; do
  6857. !     shlock -p ${PID} -f ${LOCK} && break
  6858. !     sleep 2
  6859. !     TRY=`expr ${TRY} + 1`
  6860. ! done
  6861. ! ##  If we got the lock, update the file; otherwise, give up.
  6862. ! test ${TRY} -lt ${MAXTRY} || {
  6863. !     echo "Newgroup cannot update newsgroups.  Locked by" `cat ${LOCK}` 1>&2
  6864. !     exit
  6865. ! }
  6866.   
  6867. + ${EGREP} -v "^$1[    ]" <${NEWSGROUPS} >${TEMP}
  6868. + cat ${TEMP} >${NEWSGROUPS}
  6869. + rm ${TEMP} ${LOCK}
  6870.   exit
  6871.  
  6872.  
  6873. Index: samples/scanlogs
  6874. ===================================================================
  6875. RCS file: samples/RCS/scanlogs,v
  6876. retrieving revision 1.20
  6877. diff -c1 -r1.20 samples/scanlogs
  6878. *** 1.20    1993/01/29 16:52:22
  6879. --- samples/scanlogs    1993/03/18 21:05:02
  6880. ***************
  6881. *** 1,3 ****
  6882.   #! /bin/sh
  6883. ! ##  $Revision: 1.20 $
  6884.   ##  Summarize INN log files.
  6885. --- 1,3 ----
  6886.   #! /bin/sh
  6887. ! ##  $Revision: 1.21 $
  6888.   ##  Summarize INN log files.
  6889. ***************
  6890. *** 23,26 ****
  6891.   NNTPSEND=${MOST_LOGS}/nntpsend.log
  6892. - ##  Where uucpsend, if used, writes its log information.
  6893. - UUCPSEND=${MOST_LOGS}/uucpsend.log
  6894.   ##  Where news.daily places expire output, unless noexplog was used.
  6895. --- 23,24 ----
  6896. ***************
  6897. *** 47,49 ****
  6898.   test -n "${NNTPSEND}" -a -f "${NNTPSEND}" && LOGS="${LOGS} ${NNTPSEND}"
  6899. - test -n "${UUCPSEND}" -a -f "${UUCPSEND}" && LOGS="${LOGS} ${UUCPSEND}"
  6900.   test -n "${CONTROL_DATA}" && LOGS="${LOGS} ${CONTROL_LOG}"
  6901. --- 45,46 ----
  6902. ***************
  6903. *** 130,132 ****
  6904.       ##  These are live files, so use link rather than copy.
  6905. !     for F in ${NNTPSEND} ${UUCPSEND}; do
  6906.       if [ -f ${F} ]; then
  6907. --- 127,129 ----
  6908.       ##  These are live files, so use link rather than copy.
  6909. !     for F in ${NNTPSEND} ; do
  6910.       if [ -f ${F} ]; then
  6911. ***************
  6912. *** 289,291 ****
  6913.       ##  if so, complain to your vendor and try GNU egrep.
  6914. !     P1='No body|EOF in headers|"Message-ID"'
  6915.       P2='Missing ".*" header|Linecount|Bad Date|Too old'
  6916. --- 286,288 ----
  6917.       ##  if so, complain to your vendor and try GNU egrep.
  6918. !     P1='No body|EOF in headers|"Message-ID"|No colon-space in '
  6919.       P2='Missing ".*" header|Linecount|Bad Date|Too old'
  6920.  
  6921.  
  6922. Index: samples/send-ihave
  6923. ===================================================================
  6924. RCS file: samples/RCS/send-ihave,v
  6925. retrieving revision 1.5
  6926. diff -c1 -r1.5 samples/send-ihave
  6927. *** 1.5    1992/09/14 19:21:45
  6928. --- samples/send-ihave    1993/03/18 21:05:03
  6929. ***************
  6930. *** 1,3 ****
  6931.   #! /bin/sh
  6932. ! ##  $Revision: 1.5 $
  6933.   ##  SH script to send IHAVE batches out.
  6934. --- 1,3 ----
  6935.   #! /bin/sh
  6936. ! ##  $Revision: 1.6 $
  6937.   ##  SH script to send IHAVE batches out.
  6938. ***************
  6939. *** 4,23 ****
  6940.   
  6941. ! ##  =()<NEWSBIN=@<_PATH_NEWSBIN>@>()=
  6942. ! NEWSBIN=/usr/local/news/bin
  6943. ! PATH=${NEWSBIN}:${PATH}:/bin:/usr/bin:/usr/ucb ; export PATH
  6944. ! ##  =()<SED=@<_PATH_SED>@>()=
  6945. ! SED=sed
  6946. ! ##  =()<MOST_LOGS=@<_PATH_MOST_LOGS>@>()=
  6947. ! MOST_LOGS=/var/log/news
  6948. ! ##  =()<BATCH=@<_PATH_BATCHDIR>@>()=
  6949. ! BATCH=/var/spool/news/out.going
  6950. ! ##  =()<INEWS=@<_PATH_INEWS>@>()=
  6951. ! INEWS=/usr/local/news/inews
  6952. ! ##  =()<NEWSLIB=@<_PATH_NEWSLIB>@>()=
  6953. ! NEWSLIB=/usr/local/news
  6954. ! ##  =()<LOCKS=@<_PATH_LOCKS>@>()=
  6955. ! LOCKS=/usr/local/news
  6956. ! ##  =()<TMPDIR=${TMPDIR-@<_PATH_TMP>@}>()=
  6957. ! TMPDIR=${TMPDIR-/tmp}
  6958.   
  6959. --- 4,7 ----
  6960.   
  6961. ! ##  =()<. @<_PATH_SHELLVARS>@>()=
  6962. ! . /news/lib/innshellvars
  6963.   
  6964. ***************
  6965. *** 44,73 ****
  6966.   
  6967. ! ##  Who are we sending to?
  6968. ! if [ -n "$1" ] ; then
  6969. !     LIST="$*"
  6970. ! else
  6971. !     LIST=""
  6972. !     case `date +%H` in
  6973. !     01|04|07|21|23)
  6974. !     LIST="kurz-ai aoa clsib21 leafusa metasoft"
  6975. !     ;;
  6976. !     06|12|15|17|20)
  6977. !     LIST="esca"
  6978. !     ;;
  6979. !     esac
  6980. ! fi
  6981.   
  6982. - ##  Do the work...
  6983. - for SITE in ${LIST}; do
  6984.       ##  See if any data is ready for host.
  6985. !     BATCHFILE=${SITE}.ihave
  6986. !     if [ -f ${SITE}.work ] ; then
  6987. !     cat ${SITE}.work >>${BATCHFILE}
  6988. !     rm -f ${SITE}.work
  6989.       fi
  6990. !     mv ${SITE} ${SITE}.work
  6991. !     ctlinnd -s -t30 flush ${SITE} || continue
  6992. !     cat ${SITE}.work >>${BATCHFILE}
  6993. !     rm -f ${SITE}.work
  6994.       echo "${PROGNAME}: [$$] begin ${SITE}"
  6995. --- 28,42 ----
  6996.   
  6997. ! ##  Do the work.
  6998. ! for SITE in $* ; do
  6999.   
  7000.       ##  See if any data is ready for host.
  7001. !     BATCHFILE=${SITE}.ihave.batch
  7002. !     if [ -f ${SITE}.iwork ] ; then
  7003. !     cat ${SITE}.iwork >>${BATCHFILE}
  7004. !     rm -f ${SITE}.iwork
  7005.       fi
  7006. !     mv ${SITE}.ihave ${SITE}.iwork
  7007. !     ctlinnd -s -t30 flush ${SITE}.ihave || continue
  7008. !     cat ${SITE}.iwork >>${BATCHFILE}
  7009. !     rm -f ${SITE}.iwork
  7010.       echo "${PROGNAME}: [$$] begin ${SITE}"
  7011. ***************
  7012. *** 76,81 ****
  7013.       export SITE PERMESSAGE BATCHFILE
  7014. !     while -s ${BATCHFILE} ; do
  7015.       (
  7016. !         echo Newsgroup: to.${SITE}
  7017. !         echo Control: ihave `hostname`
  7018.           echo ''
  7019. --- 45,50 ----
  7020.       export SITE PERMESSAGE BATCHFILE
  7021. !     while test -s ${BATCHFILE} ; do
  7022.       (
  7023. !         echo Newsgroups: to.${SITE}
  7024. !         echo Control: ihave `innconfval pathhost`
  7025.           echo ''
  7026.  
  7027.  
  7028. Index: samples/tally.control
  7029. ===================================================================
  7030. RCS file: samples/RCS/tally.control,v
  7031. retrieving revision 1.4
  7032. diff -c1 -r1.4 samples/tally.control
  7033. *** 1.4    1992/09/14 19:21:50
  7034. --- samples/tally.control    1993/03/18 21:05:04
  7035. ***************
  7036. *** 1,3 ****
  7037.   #!/bin/sh
  7038. ! ##  $Revision: 1.4 $
  7039.   ##  Tally/update the newgroup/rmgroup control log.
  7040. --- 1,3 ----
  7041.   #!/bin/sh
  7042. ! ##  $Revision: 1.5 $
  7043.   ##  Tally/update the newgroup/rmgroup control log.
  7044. ***************
  7045. *** 9,22 ****
  7046.   
  7047. ! ##  =()<NEWSBIN=@<_PATH_NEWSBIN>@>()=
  7048. ! NEWSBIN=/usr/local/news/bin
  7049. ! PATH=${NEWSBIN}:${PATH}:/bin:/usr/bin:/usr/ucb ; export PATH
  7050. ! ##  =()<AWK=@<_PATH_AWK>@>()=
  7051. ! AWK=/usr/local/bin/gawk
  7052. ! ##  =()<SED=@<_PATH_SED>@>()=
  7053. ! SED=sed
  7054.   
  7055. - ##  =()<LOCKS=@<_PATH_LOCKS>@>()=
  7056. - LOCKS=/usr/local/news
  7057. - ##  =()<MOST_LOGS=@<_PATH_MOST_LOGS>@>()=
  7058. - MOST_LOGS=/var/log/news
  7059.   CONTROL=${MOST_LOGS}/control.log
  7060. --- 9,13 ----
  7061.   
  7062. ! ##  =()<. @<_PATH_SHELLVARS>@>()=
  7063. ! . /news/lib/innshellvars
  7064.   
  7065.   CONTROL=${MOST_LOGS}/control.log
  7066.  
  7067.  
  7068. Index: samples/tally.unwanted
  7069. ===================================================================
  7070. RCS file: samples/RCS/tally.unwanted,v
  7071. retrieving revision 1.3
  7072. diff -c1 -r1.3 samples/tally.unwanted
  7073. *** 1.3    1992/09/14 19:21:51
  7074. --- samples/tally.unwanted    1993/03/18 21:05:05
  7075. ***************
  7076. *** 1,3 ****
  7077.   #!/bin/sh
  7078. ! ##  $Revision: 1.3 $
  7079.   ##  Tally/update the unwanted newsgroup log
  7080. --- 1,3 ----
  7081.   #!/bin/sh
  7082. ! ##  $Revision: 1.4 $
  7083.   ##  Tally/update the unwanted newsgroup log
  7084. ***************
  7085. *** 7,20 ****
  7086.   
  7087. ! ##  =()<NEWSBIN=@<_PATH_NEWSBIN>@>()=
  7088. ! NEWSBIN=/usr/local/news/bin
  7089. ! PATH=${NEWSBIN}:${PATH}:/bin:/usr/bin:/usr/ucb ; export PATH
  7090. ! ##  =()<AWK=@<_PATH_AWK>@>()=
  7091. ! AWK=/usr/local/bin/gawk
  7092. ! ##  =()<SED=@<_PATH_SED>@>()=
  7093. ! SED=sed
  7094. ! ##  =()<LOCKS=@<_PATH_LOCKS>@>()=
  7095. ! LOCKS=/usr/local/news
  7096. ! ##  =()<MOST_LOGS=@<_PATH_MOST_LOGS>@>()=
  7097. ! MOST_LOGS=/var/log/news
  7098.   
  7099. --- 7,10 ----
  7100.   
  7101. ! ##  =()<. @<_PATH_SHELLVARS>@>()=
  7102. ! . /news/lib/innshellvars
  7103.   
  7104.  
  7105.  
  7106. Index: samples/version
  7107. ===================================================================
  7108. RCS file: samples/RCS/version,v
  7109. retrieving revision 1.22
  7110. diff -c1 -r1.22 samples/version
  7111. *** 1.22    1993/01/29 16:52:28
  7112. --- samples/version    1993/03/18 21:05:06
  7113. ***************
  7114. *** 1,3 ****
  7115.   #! /bin/sh
  7116. ! ##  $Revision: 1.22 $
  7117.   ##  Version control-message handler
  7118. --- 1,3 ----
  7119.   #! /bin/sh
  7120. ! ##  $Revision: 1.23 $
  7121.   ##  Version control-message handler
  7122. ***************
  7123. *** 9,11 ****
  7124.   
  7125. ! VERSION="INN 1.3"
  7126.   
  7127. --- 9,11 ----
  7128.   
  7129. ! VERSION="INN 1.4"
  7130.   
  7131.  
  7132.  
  7133. Index: samples/writelog
  7134. ===================================================================
  7135. RCS file: samples/RCS/writelog,v
  7136. retrieving revision 1.2
  7137. diff -c1 -r1.2 samples/writelog
  7138. *** 1.2    1992/09/14 19:21:52
  7139. --- samples/writelog    1993/03/18 21:05:08
  7140. ***************
  7141. *** 1,3 ****
  7142.   #! /bin/sh
  7143. ! ##  $Revision: 1.2 $
  7144.   ##  Write a log file entry, by either mailing it or writing it safely.
  7145. --- 1,3 ----
  7146.   #! /bin/sh
  7147. ! ##  $Revision: 1.3 $
  7148.   ##  Write a log file entry, by either mailing it or writing it safely.
  7149. ***************
  7150. *** 8,21 ****
  7151.   
  7152. ! ##  =()<NEWSBIN=@<_PATH_NEWSBIN>@>()=
  7153. ! NEWSBIN=/usr/local/news/bin
  7154. ! PATH=${NEWSBIN}:${PATH}:/bin:/usr/bin:/usr/ucb ; export PATH
  7155. ! ##  =()<SED=@<_PATH_SED>@>()=
  7156. ! SED=sed
  7157. ! ##  =()<LOCKS=@<_PATH_LOCKS>@>()=
  7158. ! LOCKS=/usr/local/news
  7159. ! ##  =()<NEWSMASTER=@<NEWSMASTER>@>()=
  7160. ! NEWSMASTER=usenet
  7161. ! ##  =()<MAILCMD=@<_PATH_MAILCMD>@>()=
  7162. ! MAILCMD=/usr/ucb/Mail
  7163.   
  7164. --- 8,11 ----
  7165.   
  7166. ! ##  =()<. @<_PATH_SHELLVARS>@>()=
  7167. ! . /news/lib/innshellvars
  7168.   
  7169.  
  7170.  
  7171. Index: site/Makefile
  7172. ===================================================================
  7173. RCS file: site/RCS/Makefile,v
  7174. retrieving revision 1.14
  7175. diff -c1 -r1.14 site/Makefile
  7176. *** 1.14    1993/01/29 16:52:30
  7177. --- site/Makefile    1993/03/18 21:05:09
  7178. ***************
  7179. *** 1,2 ****
  7180. ! ##  $Revision: 1.14 $
  7181.   SHELL    = /bin/sh
  7182. --- 1,2 ----
  7183. ! ##  $Revision: 1.15 $
  7184.   SHELL    = /bin/sh
  7185. ***************
  7186. *** 62,65 ****
  7187.       ctlrun inncheck innstat \
  7188. !         innwatch logwatch \
  7189. !         innlog.awk innshellvars
  7190.   MOST_INSTALLED    = \
  7191. --- 62,64 ----
  7192.       ctlrun inncheck innstat \
  7193. !         innwatch innlog.awk innshellvars
  7194.   MOST_INSTALLED    = \
  7195. ***************
  7196. *** 75,78 ****
  7197.       $(NEWSBIN)/ctlrun $(NEWSBIN)/inncheck $(NEWSBIN)/innstat \
  7198. !         $(NEWSBIN)/innwatch $(NEWSBIN)/logwatch \
  7199. !         $(NEWSLIB)/innlog.awk $(PATH_SHELLVARS)
  7200.   
  7201. --- 74,76 ----
  7202.       $(NEWSBIN)/ctlrun $(NEWSBIN)/inncheck $(NEWSBIN)/innstat \
  7203. !         $(NEWSBIN)/innwatch $(NEWSLIB)/innlog.awk $(PATH_SHELLVARS)
  7204.   
  7205. ***************
  7206. *** 95,96 ****
  7207. --- 93,95 ----
  7208.   
  7209. + ##  Get new versions of everything from samples directory.
  7210.   all:        $(P) $(ALL) config
  7211. ***************
  7212. *** 97,98 ****
  7213. --- 96,98 ----
  7214.   
  7215. + ##  Get only scripts, not per-host config files.
  7216.   most:        $(MOST)
  7217. ***************
  7218. *** 99,100 ****
  7219. --- 99,101 ----
  7220.   
  7221. + ##  Show changes between files here and ones in samples.
  7222.   diff:
  7223. ***************
  7224. *** 101,102 ****
  7225. --- 102,109 ----
  7226.       @$(MAKE) COPY=-diff all
  7227. + ##  Show changes between files here and installed versions.
  7228. + diff-installed:
  7229. +     @$(MAKE) COPY_RPRI=-diff COPY_RPUB=-diff COPY_XPRI=-diff COPY_XPUB=-diff $(ALL_INSTALLED)
  7230. + ##  Show what would be copied from samples directory.
  7231.   what:
  7232. ***************
  7233. *** 105,107 ****
  7234.   config:        $(ALL)
  7235. !     sh ./do-subst.sh $?
  7236.       date >config
  7237. --- 112,114 ----
  7238.   config:        $(ALL)
  7239. !     $(SHELL) ./do-subst.sh $?
  7240.       date >config
  7241. ***************
  7242. *** 113,114 ****
  7243. --- 120,122 ----
  7244.   
  7245. + ##  Install scripts, not per-host config files.
  7246.   update:        $(MOST_INSTALLED)
  7247. ***************
  7248. *** 136,141 ****
  7249.   ##  Commands to make private or public, read or executable files.
  7250. ! COPY_RPRI    = sh ../installit.sh $(OWNER) -m 0440 -b .OLD
  7251. ! COPY_RPUB    = sh ../installit.sh $(OWNER) -m 0444 -b .OLD
  7252. ! COPY_XPRI    = sh ../installit.sh $(OWNER) -m 0550 -b .OLD
  7253. ! COPY_XPUB    = sh ../installit.sh $(OWNER) -m 0555 -b .OLD
  7254.   
  7255. --- 144,149 ----
  7256.   ##  Commands to make private or public, read or executable files.
  7257. ! COPY_RPRI    = $(SHELL) ../installit.sh $(OWNER) -m 0440 -b .OLD
  7258. ! COPY_RPUB    = $(SHELL) ../installit.sh $(OWNER) -m 0444 -b .OLD
  7259. ! COPY_XPRI    = $(SHELL) ../installit.sh $(OWNER) -m 0550 -b .OLD
  7260. ! COPY_XPUB    = $(SHELL) ../installit.sh $(OWNER) -m 0555 -b .OLD
  7261.   
  7262. ***************
  7263. *** 182,184 ****
  7264.   $(NEWSBIN)/innwatch:    innwatch    ; $(COPY_XPRI) $? $@
  7265. - $(NEWSBIN)/logwatch:    logwatch    ; $(COPY_XPRI) $? $@
  7266.   $(PATH_SHELLVARS):    innshellvars    ; $(COPY_RPRI) $? $@
  7267. --- 190,191 ----
  7268. ***************
  7269. *** 198,200 ****
  7270.   ##  Get files from the samples directory.
  7271. ! COPY    = @sh ./getsafe.sh
  7272.   checkgroups:    ../samples/checkgroups        ; $(COPY) $? $@
  7273. --- 205,207 ----
  7274.   ##  Get files from the samples directory.
  7275. ! COPY    = @$(SHELL) ./getsafe.sh
  7276.   checkgroups:    ../samples/checkgroups        ; $(COPY) $? $@
  7277. ***************
  7278. *** 215,217 ****
  7279.   innshellvars:    ../samples/innshellvars        ; $(COPY) $? $@
  7280. - logwatch:    ../samples/logwatch        ; $(COPY) $? $@
  7281.   makegroup:    ../samples/makegroup        ; $(COPY) $? $@
  7282. --- 222,223 ----
  7283.  
  7284.  
  7285. Index: syslog/syslog.c
  7286. ===================================================================
  7287. RCS file: syslog/RCS/syslog.c,v
  7288. retrieving revision 1.9
  7289. diff -c1 -r1.9 syslog/syslog.c
  7290. *** 1.9    1993/01/29 16:52:34
  7291. --- syslog/syslog.c    1993/03/18 21:05:11
  7292. ***************
  7293. *** 1,2 ****
  7294. ! /*  $Revision: 1.9 $
  7295.   **  Modified by Rich $alz <rsalz@osf.org> to be more portable to older
  7296. --- 1,2 ----
  7297. ! /*  $Revision: 1.10 $
  7298.   **  Modified by Rich $alz <rsalz@osf.org> to be more portable to older
  7299. ***************
  7300. *** 56,60 ****
  7301.   #include <stdio.h>
  7302. ! #if    !defined(INET_SYSLOG)
  7303.   #include <netinet/in.h>
  7304. ! #endif    /* !defined(INET_SYSLOG) */
  7305.   
  7306. --- 56,60 ----
  7307.   #include <stdio.h>
  7308. ! #if    defined(INET_SYSLOG)
  7309.   #include <netinet/in.h>
  7310. ! #endif    /* defined(INET_SYSLOG) */
  7311.   
  7312.  
  7313.  
  7314. Index: syslog/syslog.conf
  7315. ===================================================================
  7316. RCS file: syslog/RCS/syslog.conf,v
  7317. retrieving revision 1.4
  7318. diff -c1 -r1.4 syslog/syslog.conf
  7319. *** 1.4    1992/07/24 22:04:29
  7320. --- syslog/syslog.conf    1993/03/18 21:05:11
  7321. ***************
  7322. *** 1,2 ****
  7323. ! ##  $Header: /usr/local/src/inn/syslog/RCS/syslog.conf,v 1.4 1992/07/24 22:04:29 rsalz Exp $
  7324.   ##  Sample syslog.conf file for folks not used to the new syslog.
  7325. --- 1,2 ----
  7326. ! ##  $Header: /usr/local/src/inn/syslog/RCS/syslog.conf,v 1.5 1993/03/18 21:05:11 rsalz Exp $
  7327.   ##  Sample syslog.conf file for folks not used to the new syslog.
  7328. ***************
  7329. *** 15,21 ****
  7330.   ##  Note that each level includes all of the above it.
  7331. ! ## =()<news.crit     @<_PATH_MOST_LOGS>@/news.crit>()=
  7332. ! news.crit     /var/log/news/news.crit
  7333. ! ## =()<news.err         @<_PATH_MOST_LOGS>@/news.err>()=
  7334. ! news.err         /var/log/news/news.err
  7335. ! ## =()<news.notice     @<_PATH_MOST_LOGS>@/news.notice>()=
  7336. ! news.notice     /var/log/news/news.notice
  7337. --- 15,21 ----
  7338.   ##  Note that each level includes all of the above it.
  7339. ! ## =()<news.crit    @<_PATH_MOST_LOGS>@/news.crit>()=
  7340. ! news.crit    /var/log/news/news.crit
  7341. ! ## =()<news.err        @<_PATH_MOST_LOGS>@/news.err>()=
  7342. ! news.err        /var/log/news/news.err
  7343. ! ## =()<news.notice    @<_PATH_MOST_LOGS>@/news.notice>()=
  7344. ! news.notice    /var/log/news/news.notice
  7345.